「OS」の版間の差分
(パッケージとAPT。) |
(App resources About app resources) |
||
| (同じ利用者による、間の24版が非表示) | |||
| 17行目: | 17行目: | ||
ipconfig getifaddr en0 | ipconfig getifaddr en0 | ||
== | === Develop === | ||
=== | ==== About ==== | ||
==== | ===== Version ===== | ||
===== | ====== Java ====== | ||
[https:// | [https://senooken.jp/post/2020/05/18/4055/ Androidで使用可能なJavaのバージョン一覧 – senooken JP] | ||
最初に調査結果のバージョンの対応一覧を以下に掲載する。 | |||
{| class="wikitable" | |||
|+Android APIとJavaのバージョンの対応 | |||
!Date | |||
!Android version | |||
!Android API level | |||
!Java version | |||
|- | |||
|2008-09-23 | |||
|1.0-1.1 | |||
|01-02 | |||
|1.4? | |||
|- | |||
|2009-04-27 | |||
|1.5-2.2 | |||
|03-08 | |||
|5? | |||
|- | |||
|2010-12-06 | |||
|2.3-4.3 | |||
|09-18 | |||
|6? | |||
|- | |||
|2013-10-31 | |||
|4.4-6.0 | |||
|19-23 | |||
|7 | |||
|- | |||
|2016-08-22 | |||
|7.0- | |||
|24- | |||
|8 | |||
|} | |||
Android 4.4が安定しているという話を聞くので,だいたい''APIレベル19のJava 7が使用可能''と考えてよさそうだ。 | |||
====== Google Play ====== | |||
[https://support.google.com/googleplay/android-developer/answer/11926878 Google Play アプリの対象 API レベルに関する要件 - Play Console ヘルプ] | |||
Google Playでの公開条件がけっこうころころ変わる。 | |||
2025-08-31: Android 14 (APIレベル34) 以上を対象にしないと公開されない。 | |||
対象APIレベル (targetSdkVersion) を指定する。 | |||
minSdkVersionは関係ない模様。 | |||
==== Build ==== | |||
===== | ===== Could not find method jcenter() for arguments [] on repository container of type org.gradle.api.internal.artifacts.dsl.DefaultRepositoryHandler. ===== | ||
[ | Could not find method jcenter() for arguments [] on repository container of type org.gradle.api.internal.artifacts.dsl.DefaultRepositoryHandler. | ||
ビルド時にこういうエラーが出る。 | |||
build.gradleの内容。 | |||
// Top-level build file where you can add configuration options common to all sub-projects/modules. | |||
apply plugin: "com.github.ben-manes.versions" | |||
apply plugin: 'kotlin' | |||
apply plugin: 'kotlin-android-extensions' | |||
buildscript { | |||
ext.kotlin_version = '1.5.21' | |||
repositories { | |||
mavenCentral() | |||
jcenter() | |||
google() | |||
maven { | |||
url '<nowiki>https://maven.fabric.io/public'</nowiki> | |||
} | |||
} | |||
dependencies { | |||
classpath 'com.android.tools.build:gradle:7.3.1' | |||
classpath 'com.google.gms:google-services:4.3.14' | |||
classpath "com.github.ben-manes:gradle-versions-plugin:0.25.0" | |||
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.2' | |||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" | |||
classpath "io.realm:realm-gradle-plugin:10.9.0"// Crashlytics plugin | |||
} | |||
} | |||
allprojects { | |||
repositories { | |||
google() | |||
jcenter() | |||
mavenCentral() | |||
} | |||
gradle.projectsEvaluated { | |||
tasks.withType(JavaCompile) { | |||
options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation" | |||
} | |||
} | |||
} | |||
repositories { | |||
mavenCentral() | |||
} | |||
dependencies { | |||
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" | |||
} | |||
compileKotlin { | |||
kotlinOptions { | |||
jvmTarget = "1.8" | |||
} | |||
} | |||
compileTestKotlin { | |||
kotlinOptions { | |||
jvmTarget = "1.8" | |||
} | |||
} | |||
[https://codingtechroom.com/question/how-to-resolve-jcenter-error-gradle How to Resolve the 'Could Not Find Method jcenter() for Arguments []' Error in Gradle - CodingTechRoom] | |||
jcenter()をmavenCentral()に置換するか除去すればいい。 | |||
===== Connection timed out: getsockopt. If you are behind an HTTP proxy, please configure the proxy settings either in IDE or Gradle. ===== | |||
[https://m32006400n.xsrv.jp/infrastructure/android-1108/ Android Studioでプロキシ設定を行う方法【初心者向けガイド】] | |||
プロキシー設定の問題の模様。 | |||
[File]-[Settings]-[Appearance & Behavior]-[System Settings]-[HTTP Proxy] | |||
* ◎ Manual proxy configuration | |||
* Host name: | |||
* Port number: | |||
他に、gradleの設定も必要。というより、こちらが重要。 | |||
gradele.propertiesに以下を追加する。 | |||
systemProp.http.proxyHost=proxy.example.com | |||
systemProp.http.proxyPort=8080 | |||
systemProp.http.proxyUser=your_username | |||
systemProp.http.proxyPassword=your_password | |||
systemProp.https.proxyHost=proxy.example.com | |||
systemProp.https.proxyPort=8080 | |||
systemProp.https.proxyUser=your_username | |||
systemProp.https.proxyPassword=your_password | |||
httpのほうはいらないと思う。 | |||
=== | ===== Could not find com.github.ben-manes:gradle-versions-plugin:0.25.0. ===== | ||
buildscript.repositories内の以下の記載を削除。 | |||
maven { | |||
url '<nowiki>https://maven.fabric.io/public'</nowiki> | |||
} | |||
加えて、repositoriesにgradlePluginPortal()を追加。 | |||
diff --git a/build.gradle b/build.gradle | |||
index 86baf4a..6f7bdc3 100755 | |||
--- a/build.gradle | |||
+++ b/build.gradle | |||
@@ -7,11 +7,8 @@ buildscript { | |||
ext.kotlin_version = '1.5.21' | |||
repositories { | |||
mavenCentral() | |||
- jcenter() | |||
google() | |||
- maven { | |||
- url '<nowiki>https://maven.fabric.io/public'</nowiki> | |||
- } | |||
+ gradlePluginPortal() | |||
} | |||
dependencies { | |||
==== | ===== Unable to load class 'org.gradle.util.WrapUtil' org.gradle.util.WrapUtil Gradle's dependency cache may be corrupt (this sometimes occurs after a network connection timeout.) ===== | ||
Unable to load class 'org.gradle.util.WrapUtil' | |||
org.gradle.util.WrapUtil | |||
Gradle's dependency cache may be corrupt (this sometimes occurs after a network connection timeout.) | |||
Re-download dependencies and sync project (requires network) | |||
The state of a Gradle build process (daemon) may be corrupt. Stopping all Gradle daemons may solve this problem. | |||
Stop Gradle build processes (requires restart) | |||
Your project may be using a third-party plugin which is not compatible with the other plugins in the project or the version of Gradle requested by the project. | |||
In the case of corrupt Gradle processes, you can also try closing the IDE and then killing all Java processes. | |||
ごちゃごちゃやっている間にキャッシュが競合した模様。 | |||
File → Invalidate Caches... → Invalidate and Restart をクリックで解消。 | |||
===== Your build is currently configured to use incompatible Java 21.0.8 and Gradle 7.4. Cannot sync the project. ===== | |||
Your build is currently configured to use incompatible Java 21.0.8 and Gradle 7.4. Cannot sync the project. | |||
We recommend upgrading to Gradle version 9.0-milestone-1. | |||
The minimum compatible Gradle version is 8.5. | |||
The maximum compatible Gradle JVM version is 17. | |||
Possible solutions: | |||
- Upgrade to Gradle 9.0-milestone-1 and re-sync | |||
- Upgrade to Gradle 8.5 and re-sync | |||
使用しているjavaとgradleのバージョンがあっていないとこの警告が出る。 | |||
[https://docs.gradle.org/current/userguide/compatibility.html#java Compatibility Matrix] | |||
gradle 7.4発表直後のjava 18を使う。 | |||
Android ビルドの Java バージョン | Android Studio | Android Developers | |||
[Android Studio])> [Settings] > [Build, Execution, Deployment] > [Build Tools] > [Gradle] | |||
[JDKをダウンロードする] を選んで11を選ぶ。インストールにしばらく時間がかかるので、プログレスをみておく。 | |||
===== プロジェクトのJavaのバージョンの固定 ===== | |||
https://grok.com/share/c2hhcmQtMw%3D%3D_b63418af-e286-4d16-a192-57a5039e46d2 | |||
.idea/gradle.xmlにJavaのバージョン指定がある。これもVCSで管理したらいい。 | |||
===== Could not find io.realm:android-adapters:4.0.0. ===== | |||
FAILURE: Build completed with 7 failures. | |||
1: Task failed with an exception. | |||
----------- | |||
* What went wrong: | |||
Execution failed for task ':app:dataBindingMergeDependencyArtifactsDebug'. | |||
> Could not resolve all files for configuration ':app:debugCompileClasspath'. | |||
> Could not find io.realm:android-adapters:4.0.0. | |||
Required by: | |||
project :app | |||
* Try: | |||
> Run with --stacktrace option to get the stack trace. | |||
> Run with --info or --debug option to get more log output. | |||
> Run with --scan to get full insights. | |||
============================================================================== | |||
app/build.gradleを以下修正。 | |||
// implementation 'io.realm:android-adapters:4.0.0' | |||
===== superclass access check failed: class butterknife.compiler.ButterKnifeProcessor$RScanner (in unnamed module @0x511f749a) cannot access class com.sun.tools.javac.tree.TreeScanner (in module jdk.compiler) because module jdk.compiler does not export com.sun.tools.javac.tree to unnamed module @0x511f749a ===== | |||
* | Execution failed for task ':app:compileDebugJavaWithJavac'. | ||
* | > superclass access check failed: class butterknife.compiler.ButterKnifeProcessor$RScanner (in unnamed module @0x511f749a) cannot access class com.sun.tools.javac.tree.TreeScanner (in module jdk.compiler) because module jdk.compiler does not export com.sun.tools.javac.tree to unnamed module @0x511f749a | ||
* Try: | |||
> Run with --stacktrace option to get the stack trace. | |||
> Run with --info or --debug option to get more log output. | |||
> Run with --scan to get full insights. | |||
* Get more help at <nowiki>https://help.gradle.org</nowiki> | |||
Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0. | |||
You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins. | |||
See <nowiki>https://docs.gradle.org/7.4/userguide/command_line_interface.html#sec:command_line_warnings</nowiki> | |||
Ask Gemini | |||
ButterKnifeがjava 17+に未対応。java 11まで対応しているらしい。java 11にする。これで解決した。 | |||
==== | ===== SDKバージョン変更 ===== | ||
https://grok.com/share/c2hhcmQtMw%3D%3D_d3a9ac04-95f9-484e-a28a-a8e965d73e82 | |||
app/build.gradleでsdkのバージョンを指定する。変更したら、Sync Nowを選んで、Gradleに同期が必要。これをしないとビルドに反映されない。 | |||
[Run]-[Run app] が無効な時は、インストール可能な状態になっていない。 | |||
===== The application could not be installed. Installation failed due to: 'Error code: 'UNKNOWN', message='Unknown failure: 'cmd: Failure calling service package: Broken pipe (32)<nowiki>'''</nowiki> List of apks: [0] 'app\build\intermediates\apk\debug\app-debug.apk' ===== | |||
https://grok.com/share/c2hhcmQtMw%3D%3D_8aef266a-57f7-4bc9-a729-9c28ce71fb8a | |||
adb kill-server | |||
adb start-server | |||
ADBがインストールされているか確認: Android Studioインストール時に自動で入るはずですが、コマンドが「認識されない」場合は、Android SDKのplatform-toolsフォルダをPATHに追加(例: AppData\Local\Android\Sdk\platform-tools)。 | |||
一旦上記コマンドでadbサーバーを再起動すると解決するかもしれない。 | |||
===== | ===== バージョン番号 ===== | ||
[https://developer.android.com/studio/publish/versioning?hl=ja アプリのバージョニング | Android Studio | Android Developers] | |||
build.gradleのdefaultConfigのversionCode/versionNameで指定する模様。 | |||
android { | |||
namespace 'com.example.testapp' | |||
compileSdk 33 | |||
defaultConfig { | |||
applicationId "com.example.testapp" | |||
minSdk 24 | |||
targetSdk 33 | |||
versionCode 1 | |||
versionName "1.0" | |||
... | |||
} | |||
... | |||
} | |||
... | |||
versionNameはユーザーに表示用。versionCodeは内部用。 | |||
プロジェクトによっては、app/src/main/AndroidManifest.xmlに記載した利する模様。昔やアプリ内の表示用にはこれだったのかも。 | |||
<?xml version="1.0" encoding="utf-8"?> | |||
<manifest xmlns:android="<nowiki>http://schemas.android.com/apk/res/android</nowiki>" | |||
xmlns:tools="<nowiki>http://schemas.android.com/tools</nowiki>" | |||
android:testOnly="false" | |||
android:versionCode="502010" | |||
android:versionName="5.2.1"> | |||
``` | |||
書式は以下の通り。 | |||
- versionName: メジャー番号.マイナー番号.パッチ番号。プラットフォーム変更など大きな変更はメジャー番号、機能更新はマイナー番号、軽微な修正はパッチ番号、をそれぞれ更新。 | |||
- versionCode: 502010 | |||
- 5: メジャー番号。2桁以上になるなら先頭に追加。 | |||
- 02: マイナー番号。2桁。 | |||
- 01: パッチ番号。2桁。 | |||
- 0: 増分用番号。1桁。google play consoleでアップロードミスなどした時用。 | |||
# | ===== Unsupported class file major version 65 ===== | ||
[https://qiita.com/hollage0214/items/32975aa6b115fd317672 Gradleでビルドすると'Task :resolveMainClassName FAILED'で失敗する #Java - Qiita] | |||
FAILURE: Build failed with an exception. | |||
* What went wrong: | |||
A problem occurred configuring project ':app'. | |||
> Could not open cp_proj generic class cache for build file 'C:\Users\20165\project\sfcc-djmob-Android\app\build.gradle' (C:\Users\20165\.gradle\caches\8.0\scripts\ep3ykkf9780jtyl1zxsvmzjzx). | |||
> BUG! exception in phase 'semantic analysis' in source unit '_BuildScript_' Unsupported class file major version 65 | |||
JVMのバージョンが新しすぎて、対応していないとのkと。 | |||
65-44で使用しているjavaのバージョンになる。 | |||
古いjavaを使うしかない。 | |||
===== Build Type 'debug' contains custom BuildConfig fields, but the feature is disabled. ===== | |||
[https://www.gesource.jp/weblog/?p=8995 「Build Type ‘debug’ contains custom BuildConfig fields」エラーの対策 – 山本隆の開発日誌] | |||
A problem occurred configuring project ':app'. | |||
> com.android.builder.errors.EvalIssueException: Build Type 'debug' contains custom BuildConfig fields, but the feature is disabled. | |||
Android Gradle Plugin (AGP) 8 以降では、buildConfig機能がデフォルトで無効になっています。 | |||
つまり、カスタムBuildConfigフィールドを使用すると、エラーが発生します。 | |||
例えば、以下のように<code>build.gradle (Module: app)</code>にbuildConfigFieldを追加している場合、このエラーが発生します。 | |||
<android { | |||
buildTypes { | |||
debug { | |||
buildConfigField "String", "API_URL", "\"<nowiki>https://api.example.com</nowiki>\"" | |||
} | |||
} | |||
} | |||
このエラーを解決するためには、buildConfig機能を有効にする必要があります。 | |||
<code>build.gradle (Module: app)</code>を開き、以下の設定を追加してください。 | |||
<android { | |||
buildFeatures { | |||
buildConfig true | |||
} | |||
} | |||
===== Cause: superclass access check failed: class butterknife.compiler.ButterKnifeProcessor$RScanner ===== | |||
Cause: superclass access check failed: class butterknife.compiler.ButterKnifeProcessor$RScanner (in unnamed module @0x41a82fc4) cannot access class com.sun.tools.javac.tree.TreeScanner (in module jdk.compiler) because module jdk.compiler does not export com.sun.tools.javac.tree to unnamed module @0x41a82fc4 | |||
[https://web.archive.org/web/20230903200350/https://stackoverflow.com/questions/71257962/how-can-i-fix-this-error-with-butterknife-in-android-studio How can I fix this error with ButterKnife in Android Studio? - Stack Overflow] | |||
対処方法が2種類。 | |||
1 JDK 11を使う。 | |||
2 gradle.propertiesに以下を記載。 | |||
org.gradle.jvmargs=-Xmx1920M \ | |||
--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED \ | |||
--add-exports=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED \ | |||
--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED | |||
2番目の方法がよさそう。 | |||
===== エラー: 定数式が必要です ===== | |||
* [https://qiita.com/yato_minagumo/questions/8fb60c7b77d7625ae04c [Q&A] Android studioでswitch文を使うとエラーが出る - Qiita] | |||
* [https://teratail.com/questions/pn092j3f2d9x9t finalで定数宣言しているはずなのに定数式が必要ですとエラーが出る] | |||
* [https://polo-web.com/2025/08/18/android-studio-switch-case-statement-cannot-be-used/ Android Studioでswitchのcase文が使えない問題 – Macな暮らし] | |||
エラー: 定数式が必要です | |||
case R.id.btn1: | |||
こんなビルドエラーが、gradleのバージョンを上げると発生するようになった。 | |||
gradle 8.0では起きなくて、8.5だと発生する。 | |||
resのxmlからjavaに変換する際に、以前はfinalついていたのが、途中でつかなくなったのが原因らしい。 | |||
caseではなく、if文で書き直せばOK。 | |||
===== エラー: 要素値は定数式である必要があります ===== | |||
エラー: 要素値は定数式である必要があります | |||
@BindView(R.id.title_view) | |||
caseと同じタイプの気がする。 | |||
* [https://tech.pepabo.com/2024/04/09/delete-butter-knife/#butterknife%E5%89%8A%E9%99%A4%E3%81%AE%E8%83%8C%E6%99%AF%E3%81%A8%E6%B1%BA%E6%96%AD ButterKnifeを minne Android から完全に削除しました - Pepabo Tech Portal] | |||
[https:// | * [https://developer.android.com/topic/libraries/view-binding?hl=ja#java ビュー バインディング | App architecture | Android Developers] | ||
ButterKnifeという昔リソースの紐づけに使われていたライブラリー。gradleのバージョンアップでfinalが外れたのが原因。view bindとか本体の機能に統合されているので、このタイミングでそちらに移行したほうがいい。 | |||
対応方針。 | |||
# app/build.gradleにviewbidingの設定 | |||
# idを使っているリソースxmlにlayoutタグを一番外側に追加。 | |||
# @bindviewしているところを、bindingを取得してそこからの参照に変更。 | |||
// ViewBindingに移行するためのXMLの変更例... | |||
// Before | |||
<RelativeLayout xmlns:android="<nowiki>http://schemas.android.com/apk/res/android</nowiki>" | |||
android:layout_width="match_parent" | |||
android:layout_height="match_parent"> | |||
<ScrollView | |||
android:layout_width="match_parent" | |||
android:layout_height="match_parent" | |||
android:layout_below="@id/toolbar"> | |||
// 省略... | |||
</RelativeLayout> | |||
</ScrollView> | |||
</RelativeLayout> | |||
// After | |||
<layout> ← こちらを追加 | |||
<RelativeLayout xmlns:android="<nowiki>http://schemas.android.com/apk/res/android</nowiki>" | |||
android:layout_width="match_parent" | |||
android:layout_height="match_parent"> | |||
<ScrollView | |||
android:layout_width="match_parent" | |||
android:layout_height="match_parent" | |||
android:layout_below="@id/toolbar"> | |||
// 省略... | |||
</RelativeLayout> | |||
</ScrollView> | |||
</RelativeLayout> | |||
</layout> | |||
=== | // ViewBindingに移行するためのXMLの変更例... | ||
// Before | |||
public class ShippingAddressSelectorActivity extends AppCompatActivityActivity { | |||
private final int mMenuGroupId = 0; | |||
@BindView(R.id.toolbar) | |||
Toolbar toolbar; | |||
@BindView(R.id.activity_shipping_address_selector_list) | |||
RecyclerView shippingAddressesView; | |||
@BindView(R.id.activity_shipping_address_selector_cautions_about_ordered) | |||
TextView cautionsTextView; | |||
@BindView(R.id.activity_shipping_address_selector_progress_bar) | |||
View progressBar; | |||
@Override | |||
protected void onCreate(Bundle savedInstanceState) { | |||
super.onCreate(savedInstanceState); | |||
setContentView(R.layout.activity_shipping_address_selector); | |||
ButterKnife.bind(this); | |||
toolbar.setTitle(R.string.title_select_shipping_address); | |||
mShippingAddressesView.setLayoutManager(new LinearLayoutManager(this)); | |||
ShippingAddressAdapter adapter = new ShippingAddressAdapter(this); | |||
shippingAddressesView.setAdapter(adapter); | |||
cautionsTextView.setText(R.string.caution_text); | |||
} | |||
} | |||
// After | |||
public class ShippingAddressSelectorActivity extends AppCompatActivityActivity { | |||
private final int mMenuGroupId = 0; | |||
// Binding クラスの定義 | |||
private ActivityShippingAddressSelectorBinding binding; | |||
@Override | |||
protected void onCreate(Bundle savedInstanceState) { | |||
super.onCreate(savedInstanceState); | |||
binding = DataBindingUtil.setContentView(this, R.layout.activity_shipping_address_selector); | |||
binding.toolbar.setTitle(R.string.title_select_shipping_address); | |||
setSupportActionBar(binding.toolbar); | |||
if (getSupportActionBar() != null) { | |||
getSupportActionBar().setDisplayHomeAsUpEnabled(true); | |||
} | |||
binding.activityShippingAddressSelectorList.setLayoutManager(new LinearLayoutManager(this)); | |||
ShippingAddressAdapter adapter = new ShippingAddressAdapter(this); | |||
binding.activityShippingAddressSelectorList.setAdapter(adapter); | |||
binding.activityShippingAddressSelectorCautionsAboutOrdered.setText(R.string.caution_text); | |||
} | |||
} | |||
<syntaxhighlight lang="diff" line="1"> | |||
$ diff -u a.java b.java | |||
--- a.java 2025-10-29 15:55:01.702784800 +0900 | |||
+++ b.java 2025-10-29 15:55:21.477947600 +0900 | |||
@@ -1,30 +1,25 @@ | |||
public class ShippingAddressSelectorActivity extends AppCompatActivityActivity { | |||
private final int mMenuGroupId = 0; | |||
- @BindView(R.id.toolbar) | |||
- Toolbar toolbar; | |||
- | |||
- @BindView(R.id.activity_shipping_address_selector_list) | |||
- RecyclerView shippingAddressesView; | |||
- | |||
- @BindView(R.id.activity_shipping_address_selector_cautions_about_ordered) | |||
- TextView cautionsTextView; | |||
- | |||
- @BindView(R.id.activity_shipping_address_selector_progress_bar) | |||
- View progressBar; | |||
+ // Binding クラスの定義 | |||
+ private ActivityShippingAddressSelectorBinding binding; | |||
@Override | |||
protected void onCreate(Bundle savedInstanceState) { | |||
super.onCreate(savedInstanceState); | |||
- setContentView(R.layout.activity_shipping_address_selector); | |||
- ButterKnife.bind(this); | |||
== | - toolbar.setTitle(R.string.title_select_shipping_address); | ||
+ binding = DataBindingUtil.setContentView(this, R.layout.activity_shipping_address_selector); | |||
+ | |||
+ binding.toolbar.setTitle(R.string.title_select_shipping_address); | |||
+ setSupportActionBar(binding.toolbar); | |||
+ if (getSupportActionBar() != null) { | |||
+ getSupportActionBar().setDisplayHomeAsUpEnabled(true); | |||
+ } | |||
- mShippingAddressesView.setLayoutManager(new LinearLayoutManager(this)); | |||
+ binding.activityShippingAddressSelectorList.setLayoutManager(new LinearLayoutManager(this)); | |||
ShippingAddressAdapter adapter = new ShippingAddressAdapter(this); | |||
- shippingAddressesView.setAdapter(adapter); | |||
- cautionsTextView.setText(R.string.caution_text); | |||
+ binding.activityShippingAddressSelectorList.setAdapter(adapter); | |||
+ binding.activityShippingAddressSelectorCautionsAboutOrdered.setText(R.string.caution_text); | |||
} | |||
} | |||
</syntaxhighlight> | |||
やること自体はシンプル。 | |||
元ブログのやり方間違っている。 | |||
binding = LayoutStageDetailViewBinding.inflate(getLayoutInflater()); | |||
setContentView(binding.getRoot()); | |||
bindingはメンバー変数で持っておく必要がある。 | |||
onclickとか。 | |||
binding.stageAbout.setOnClickListener((View v) -> { | |||
onClickContentsOpenBrowser(URLSetting.URL_STAGE_ABOUT, EventTracker.A_stage_up_lp, | |||
FbAnalyticsTracker.STAGE_UP_LP); | |||
}); | |||
これでいい。 | |||
https://grok.com/share/c2hhcmQtMw%3D%3D_466b34c5-6d5a-4958-b1b7-b894a451e4cb | |||
Activity以外のVewとかの場合。公式の「フラグメントでビュー バインディングを使用する」を参考にする。 | |||
binding = ContainerDpWebviewBinding.inflate(LayoutInflater.from(context), this, true); | |||
これでinflateする。 | |||
fragmentの場合。 | |||
private ResultProfileBinding binding; | |||
@Override | |||
public View onCreateView (LayoutInflater inflater, | |||
ViewGroup container, | |||
Bundle savedInstanceState) { | |||
binding = ResultProfileBinding.inflate(inflater, container, false); | |||
View view = binding.getRoot(); | |||
return view; | |||
} | |||
@Override | |||
public void onDestroyView() { | |||
super.onDestroyView(); | |||
binding = null; | |||
} | |||
===== Duplicate class kotlin.collections.jdk8.CollectionsJDK8Kt found in modules ===== | |||
Execution failed for task ':app:checkDebugDuplicateClasses'. | |||
> A failure occurred while executing com.android.build.gradle.internal.tasks.CheckDuplicatesRunnable | |||
> Duplicate class kotlin.collections.jdk8.CollectionsJDK8Kt found in modules kotlin-stdlib-1.8.10.jar -> jetified-kotlin-stdlib-1.8.10 (org.jetbrains.kotlin:kotlin-stdlib:1.8.10) and kotlin-stdlib-jdk8-1.6.21.jar -> jetified-kotlin-stdlib-jdk8-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.21) | |||
* [https://qiita.com/YuukiYoshida/items/37dd7cea0918fe8a03d6 【Android】JDKの依存関係でビルドエラーとなった場合の対処法 #Kotlin - Qiita] | |||
app/build.gradleに追加して除外すればいいとのこと。 | |||
configurations.implementation { | |||
exclude group: 'org.jetbrains.kotlin', module: 'kotlin-stdlib-jdk8' | |||
exclude group: 'org.jetbrains.kotlin', module: 'kotlin-stdlib-jdk7' | |||
} | |||
結局、この方法では解決しなくて、以下の方法で解決した。 | |||
[https://archive.li/thZ0j java - Duplicate class in Kotlin Android - Stack Overflow] | |||
app/build.gradle | |||
dependencies { | |||
constraints { | |||
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.0") { | |||
because("kotlin-stdlib-jdk7 is now a part of kotlin-stdlib") | |||
} | |||
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.0") { | |||
because("kotlin-stdlib-jdk8 is now a part of kotlin-stdlib") | |||
} | |||
} | |||
} | |||
===== com.android.builder.errors.EvalIssueException: compileSdkVersion is not specified. Please add it to build.gradle ===== | |||
A problem occurred configuring project ':app'. | |||
> com.android.builder.errors.EvalIssueException: compileSdkVersion is not specified. Please add it to build.gradle | |||
[https://stackoverflow.com/questions/50530889/gradle-sync-failed-cause-compilesdkversion-is-not-specified android - Gradle sync failed: Cause: compileSdkVersion is not specified - Stack Overflow] | |||
app/build.gradleのandroid.compileSdkVersionの記載はSDK33以上では廃止予定とのこと。 | |||
android { | |||
// compileSdkVersion 33 and above | |||
defaultConfig { | |||
compileSdk 33 | |||
} | |||
... | |||
代わりにdefaultConfigに記載するとか。 | |||
===== | ===== targetSdkVersionを34から35に更新 ===== | ||
* [https://tech.mti.co.jp/entry/ac2025summer/0826 【Android】targetSdkVersionを34から35に更新する - エムティーアイ エンジニアリングブログ] | |||
* [https://tech.mti.co.jp/entry/ac2025summer/0806 Android 15のEdge-to-Edge強制適用でステータスバーのUIが崩れる問題と無効化する方法【解説・設定例付き】 - エムティーアイ エンジニアリングブログ] | |||
* [https://hanzochang.com/articles/26 Android API 35対応でデザインが崩れた!Edge-to-edge表示の対処法 | hanzochang] | |||
* [https://qiita.com/FalconFlat/items/730128eb13afc812d4a5 targetSDK35に移行した時に気をつけたこと #Android - Qiita] | |||
Android 15でEdge-to-edgeというステータスバー関係の機能がデフォルトで有効になり、レイアウトが崩れる。 | |||
無効化が必要。だが、android 15 (sdk 35) の機能が必要で、それのコンパイルは前提。 | |||
==== App resources ==== | |||
===== About app resources ===== | |||
[https://developer.android.com/guide/topics/resources/providing-resources?hl=ja アプリのリソースの概要 | App architecture | Android Developers] | |||
====== 代替リソースの指定 ====== | |||
resディレクトリーにvalues-XXみたいな形式で、代替リソースを用意できる。 | |||
== iOS == | |||
=== Settings === | |||
==== Keyboard ==== | |||
[Settings]-[General]-[Keyboards] が設定項目。 | |||
===== GPS一発切替 ===== | |||
[https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13311857568 iPhoneのショートカットについて質問です。位置情報サービス内の「システム... - Yahoo!知恵袋] | |||
iPhoneのGPS設定は深い階層にあって、頻繁に切替必要なのに手間がかかる。 | |||
Shortcutsアプリでショートカットを作成して短縮できる。 | |||
[Shortcuts]-[All Shortcuts]-[+]-[Open URLs]-[Open]=[prefs:root=Privacy&path=LOCATION/SYSTEM_SERVICES] | |||
これで1タップで開ける。 | |||
[[https://support.apple.com/ja-jp/guide/shortcuts/apd029b36d05/8.0/ios/18.0 iPhoneまたはiPadのウィジェットからショートカットを設定して実行する - Apple サポート (日本)]] を参考に、ウィジェットにしてホーム画面に配置するとどこからでも1タップで開ける。 | |||
===== Gboard ===== | |||
[https://reskill.nikkei.com/article/DGXZQOLM3015B0Q2A830C2000000/?page=4 スマホの日本語入力 目からウロコの楽々ワザとは? | NIKKEIリスキリング] | |||
| | iOS版のGboardはAndroid版と異なり機能が劣る。標準キーボードを使ったほうがいいらしい。 | ||
===== Space ===== | |||
[https://ascii.jp/elem/000/002/006/2006200/ ASCII.jp:iPhoneで常に半角スペースを入力できるようにする方法] | |||
* [ALL KEYBOARDS]-[Smart Punctuation]=On: Off推奨。 | |||
* [KANA]-[Smart Fullwidth Space]=On: =Off推奨。 | |||
これで常に半角スペース入力になる。 | |||
===== 瞬間切替 ===== | |||
[https://www.nikkei.com/article/DGXZQOLM304P70Q2A830C2000000/ iPhoneは裏ワザだらけ、英数字と記号を思い通りに入力 スマホ日本語入力再入門(3) - 日本経済新聞] | |||
英語キーボードで1文字だけ数字や記号を入力したいことがある。 | |||
その場合、[数字切替] キーをドラッグしたまま、入力したいキーで離す。すると、数字や記号を1文字だけ入力して、英字モードに戻る。切替の手間が省けて楽。 | |||
===== Other ===== | |||
[https://www.nikkei.com/article/DGXZQOLM304P70Q2A830C2000000/ iPhoneは裏ワザだらけ、英数字と記号を思い通りに入力 スマホ日本語入力再入門(3) - 日本経済新聞] | |||
* [ALL KEYBOARDS]-[Auto-Punctuation/自動大文字入力]=On: Off推奨。英語キーボード切替時に先頭が自動で大文字になる機能。英語圏の人なら便利だが非英語圏なら邪魔。 | |||
* [ALL KEYBOARDS]-[Auto-Correction]=On: Off推奨。一般的な綴でない場合、誤入力と判断され、変換のデフォルトが修正候補になる。 | |||
* [ENGLISH]-["." Shortcut]=On: On推奨。英語キーボードには.がない。これがオンだと、スペースのダブルタップで.を入力できる。 | |||
=== Network === | |||
==== テザリング ==== | |||
出典: | |||
* [https://news.mynavi.jp/article/20220329-iphone_why/ iPhoneのテザリングがすぐに途切れてしまいます!? - いまさら聞けないiPhoneのなぜ | マイナビニュース] | |||
| | * [https://support.apple.com/ja-jp/guide/mac-help/mchl7594e36f/14.0/mac/14.0 iPhoneまたはiPadを使ってMacをインターネットに接続する - Apple サポート (日本)] | ||
無通信状態が90秒ほどしばらく続くと省電力設計のため、自動的にオフになる。これが困る。Andriodは自動オフにはならない。 | |||
いくつか対策がある。 | |||
# [Personal Hotspot] (インターネット共有) 画面の表示を維持。自動ロックも解除しておく。 | |||
# USB/Wi-FiではなくBluetooth経由にする。⇢Bluetooth接続はMontary以上で不能。 | |||
Bluetooth経由のほうが、範囲が短く、電力消費量も抑えられるので、Bluetoothがよさそう。他にはUSB接続。 | |||
Bluetooth接続はできなくなっているので、画面表示か通信しておくしかない。 | |||
==== Instant Hotspot ==== | |||
出典: | |||
* [https://news.mynavi.jp/article/20230816-iphone_mac/ MacからiPhoneの電話回線を利用できる「インターネット共有」のやり方 - iPhoneユーザーのためのMacのトリセツ | マイナビニュース] | |||
| | * [https://support.apple.com/ja-jp/HT209459 Instant Hotspot を使ってパスワードを入力せずにインターネット共有で接続する - Apple サポート (日本)] | ||
Bluetoothでのテザリングはできないものの、類似機能のInstant Hotspotで実現できるらしい。 | |||
いくつか条件がある。 | |||
* iPhone/iPadでインターネット共有 (Personal Hotspot) 対応。 | |||
* 全デバイスで同じApple IDでiCloudにログイン。 | |||
* 全デバイスでBluetoothオン。 | |||
* Wi-Fiオン. | |||
[Personal Hotspot]-[Allow Others to Join] をオンにしなくても自分だけ接続できるのが利点。逆にいうとこれくらい。Bluetoothをオンにしないといけないぶん、余計な通信処理が入る。使わなくていい。 | |||
==== Bluetooth ==== | |||
出典: | |||
* [https://discussionsjapan.apple.com/thread/254551558?sortBy=best MacBook Pro(M1)でBlu… - Apple コミュニティ] | |||
* [https://help.airdroid.com/hc/ja/articles/1260806836369-iOS%E3%83%87%E3%83%90%E3%82%A4%E3%82%B9%E3%81%A8Mac%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%82%92Bluetooth%E3%81%A7%E6%8E%A5%E7%B6%9A%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95%E3%81%AF- iOSデバイスとMacコンピュータをBluetoothで接続する方法は? – エアドロイド・サポート・センター] | |||
MacS v12.1 (Monterey) からiOSでのBluetooth接続が不能になった。 | |||
Wi-FiかUSBで接続する。実務的には困らないはず。 | |||
==== Saving ==== | |||
===== 1Blocker ===== | |||
* [https://www.reddit.com/r/iphone/comments/1dh0z24/low_data_use_browser_for_iphone/ Low data use browser for iPhone : r/iphone] | |||
* [https://note.com/kondofumikazu/n/naadf37a7145d 1Blockerで煩わしい広告とサヨナラ!快適なネットサーフィンを実現する方法|近藤史一] | |||
Safari向けの広告ブロッカーアプリ。他に280blockerという有料アプリがある。こちらは日本向け。1Blockerはグローバル。基本無料で追加機能は有料。 | |||
通信を節約する方法がいくつかある。 | |||
# Wi-Fiを使う場合、Wi-Fiのアクセスポイントごとの設定で [Low Data Mode] がある。これをオンにすると節約できる。 | |||
# SIMの場合、[Cellular Data Options]-[Low Data Mode] がある。[Low Data Mode]=onにすると、自動更新や写真の動機などのバックグラウンドタスクが停止される。 | |||
# ブラウザーのコンテンツブロッカー。例えば、1Blocker。メディアを無効にするカスタムルールで、大幅に節約できる。 | |||
## [Advanced customize]-[custom rule]-[new rule] | |||
## .+/Block all type resource=off/ | |||
<blockquote>2 番目に、Safari をコンテンツ ブロッカーと一緒に使用することをお勧めします。私は 1Blocker を使用していますが、メディアを無効にするカスタム ルールを作成して、帯域幅を大幅に節約できます。[高度なカスタマイズ]、[カスタム ルール]、[新規ルール] の順に進み、正規表現に.+(ドットとプラス記号はすべての URL に一致します) を入力し、[すべてのタイプのリソースをブロック] をオフに切り替え、画像、フォント、RAW、SVG、メディア、ポップアップをオンに戻します。保存します。これにより、これらの特定のリソース タイプをすべて読み込む要求がグローバルにブロックされ、帯域幅を大幅に節約できます。</blockquote>カスタムルールのメディア無効の効果が大きい。 | |||
280blockerが日本の広告に一番詳しい。こちらで広告元ドメインのリストを配布しているようで、これを取り込むとほぼ広告をブロックできるらしい。 | |||
iPhoneで以下のURLの年月の部分を現在にしてダウンロードする。 | |||
https://280blocker.net/files/280blocker_1blocker_202310.1blockpkg | |||
[https://x.com/280blocker/status/1881856052351954949 Xユーザーの280blockerさん: 「弊社にて提供中の1blocker用ファイルについてブログに記載いたしました。」 / X] | |||
ただ、1blockerが6.xにバージョンアップして、定義ファイルに更新が入って互換性がなくなった模様。 | |||
280blockerは元々1blockerの5chのスレッドで280番目にレスしたことが始まりだとか。2021年からトビラシステムズに3億円くらいで買収されたらしい。 | |||
===== AdGuard ===== | |||
* [https://x.com/ichitaso2/status/1850343437369012290 Xユーザーのいちご🍓₣ƦEEÐØMさん: 「ちなみに、iPhone向けの広告ブロックアプリ280blockerは、もともと5chの1blockerスレで280番目にレスしてフィルターを公開してた人が作ったものだが、トビラシステムズに3億7700万円で買収されている。利害関係なのか広告は貫通するようになったのでAdGuardを個人的に使ってる https://t.co/XEsmTosyq6」 / X] | |||
* [https://www.patreon.com/posts/101221812 【iPhone】 AdGuardを使って無料で広告をブロックする | Patreon] | |||
こちらの手順に従ってAdGuardを試す。AdGuardアプリ-[Settings]-[Support]-[Watch video tutorial] をやればよさそう。 | |||
| | |||
# AdGuardをインストール。 | |||
# [Settings]-[Apps]-[Safari]-[General]-[Extensions] | |||
# AdGuardで始まるスイッチを全部オンにする。 | |||
# Safariを開く。 | |||
# アドレスバーの左の[aA]など-[Manage Extensions]-AdGuardをオン。 | |||
# アドレスバーの左の[aA]など-[AdGuard]-[Always Allow]-[Always Allow on Every Website] | |||
[https://qiita.com/loach/items/950ce46f5e3ab946803a AdGuard DNSで広告除去 #広告ブロック - Qiita] | |||
アプリの他にDNSもある。これを設定するとSafari以外も埋込広告以外をブロックできる。 | |||
「[https://adguard-dns.io/ja/public-dns.html パブリックAdGuard DNSサーバーに接続する方法 | AdGuard DNS]」に手順がある。これのOption2: Configure AdGuard DNS manuallyをやる。 | |||
# AdGuardのDNSプロファイルをダウンロード | |||
# [Settings]-[General]-[VPN & Device Management]-[Downloaded profile]-[AdGuard DoH]-[Install] を選ぶ。 | |||
これでWebベースの広告はだいたいブロックされて、動作が軽くなるらしい。 | |||
| | |||
===== Safari ===== | |||
[https://digital-style.jp/a-speed-limit iPhoneの通信量を劇的に節約するコツ10選【ギガ不足を解消】 | デジスタ] | |||
Safariの設定が重要。 | |||
[Settings]-[Apps]-[Safari] | |||
[Preload Top Hit/トップヒットを事前に読み込む]: これをオフにする。検索時にブックマークから訪問候補を挙げてくれて、さらにバックグラウンドで読み込みも開始する。 | |||
=== Sound === | |||
出典: [https://support.apple.com/ja-jp/guide/iphone/iphb71f9b54d/ios iPhoneの音量を調整する - Apple サポート (日本)]。 | |||
| | |||
音量は左サイドボタンで上下できる。左上のスイッチがマナーモードの切替になっている。消音モードと呼んでいる。 | |||
=== Mail === | |||
==== 複数アカウント ==== | |||
「[https://xtech.nikkei.com/atcl/nxt/column/18/00088/00082/ 複数アカウントを使いこなす、iPhoneメールアプリの知られざる便利機能 | 日経クロステック(xTECH)]」 | |||
iPhoneのメールアプリは標準のMailを使うのがよいだろう。K-9がないから。複数アカウントにも対応しているが、設定が若干特殊。アプリ設定からではなく、iOS本体の設定から行う。 | |||
==== This message is from a sender in your blocked list. ==== | |||
自分宛へのメールが、なぜかブロックリストに登録されていて、iOSのMailアプリで開くと自動でTrashに移動されてしまう。必要なメールもごみ箱に強制的に入ってしまい、困る。 | |||
[This message is from a sender in your blocked list.] の警告が表示されている。 | |||
「[https://discussions.apple.com/thread/254871784?sortBy=rank All sent messages marked blocked sender - Apple Community]」で同じ議論がある。 | |||
| | |||
上記警告文の [Settings] からMailアプリの設定で [Blocked Sender Options] や [Blocked] にブロックリストがあるので、これを解除するといいらしい。 | |||
電話の受信拒否をすると、同じアドレスがこちらに入る模様。 | |||
[Blocked Sender Options] を [Move to Trash] から [Leave in Inbox] にするだけでもいいかもしれない。 | |||
ただ、特にブロックした覚えのないメールが勝手に登録されていたので、注意が必要。 | |||
=== App === | |||
いくつか必要なアプリがあるので整理する。 | |||
==== Switcher ==== | |||
出典: [https://support.apple.com/ja-jp/guide/iphone/iph1a1f981ad/ios iPhoneで開いているアプリを切り替える - Apple サポート (日本)]。 | |||
アプリスイッチャーという機能で、現在実行中のアプリを変更可能。Androidはホームの上スワイプ、右ボタンだった。iOSはホームのダブルクリック。 | |||
==== KeePass ==== | |||
パスワード管理アプリ。iOSは別になる。KeePass XCはQtを使っているからビルドできるはずなんだけど。 | |||
「[https://www.labohyt.net/blog/apple/post-5079 iOS 向けの Keepass クライアントの備忘録 | hyt adversaria]」を見る限り、KeePassiumが良さそう。 | |||
==== Camera/Video ==== | |||
===== Camera ===== | |||
出典: [https://blog.daletto.net/iphone%E3%81%AE%E3%82%AB%E3%83%A1%E3%83%A9%E8%A7%A3%E5%83%8F%E5%BA%A6%E3%82%92%E5%A4%89%E6%9B%B4%E3%81%97%E5%86%99%E7%9C%9F-%E5%8B%95%E7%94%BB%E3%82%B5%E3%82%A4%E3%82%BA%E3%82%92%E8%BB%BD%E3%81%8F/ iPhoneのカメラ解像度を変更し写真/動画サイズを軽くする便利技 – 格安SIM初心者教室] | |||
iPhoneのデフォルトのカメラは解像度が高すぎて写真のファイルサイズがかなり大きい。変更できない。せいぜいインカメラで撮影するくらい。 | |||
LINE Cameraが定番のカメラアプリらしい。こちらは解像度を柔軟に設定できる。 | |||
[Settings]-[Saving]-[Resolution]-[Medium] に変更。これでデフォルトの半分になる。 | |||
「[https://blog.daletto.net/iphone%E3%81%AE%E3%82%AB%E3%83%A1%E3%83%A9%E8%A7%A3%E5%83%8F%E5%BA%A6%E3%82%92%E5%A4%89%E6%9B%B4%E3%81%97%E5%86%99%E7%9C%9F-%E5%8B%95%E7%94%BB%E3%82%B5%E3%82%A4%E3%82%BA%E3%82%92%E8%BB%BD%E3%81%8F/ iPhoneのカメラ解像度を変更し写真/動画サイズを軽くする便利技 – 格安SIM初心者教室]」はもっと小さい。こちらがいいだろう。 | |||
Low Cameraはもっと小さいが、小さすぎて細かい文字が見えなくて困る。調べた。 | |||
| | |||
| | 「[https://good-apps.jp/media/column/7434 2024|無音カメラアプリおすすめランキング11選|無料|高画質 | Good!Apps]」が参考になった。 | ||
| | |||
| | Simple Camがよかった。基本はこの1.2MPか0.3MP。外観だけでいいならLowCameraとか。 | ||
| | {| class="wikitable" | ||
| | |rank | ||
| | |OS | ||
|name | |||
|url | |||
|Free | |||
|level | |||
|MP | |||
|resolution px | |||
|size KB | |||
|square | |||
|備考 | |||
|- | |- | ||
| | |4 | ||
|iOS | |iOS | ||
| | |LowCamera | ||
| | | | ||
| | | | ||
|Very Low | |||
|0.05 | |||
|144x144 | |||
|25 | |||
|x | |||
| | | | ||
|- | |- | ||
| | |4 | ||
|iOS | |iOS | ||
| | |LowCamera | ||
| | | | ||
| | | | ||
|Low | |||
|0.1 | |||
|360x360 | |||
|50 | |||
|x | |||
| | | | ||
|- | |- | ||
| | |4 | ||
|iOS | |iOS | ||
| | |LowCamera | ||
| | | | ||
| | |||
|Medium | |||
|0.2 | |||
|480x480 | |||
|100 | |||
|x | |||
|画質が低すぎる。 | |||
|- | |||
|4 | |||
|iOS | |||
|LINE Camera | |||
| | | | ||
| | | | ||
| | |Medium | ||
| | |2 | ||
| | |1512x1512 | ||
| | |1024 | ||
|x | |||
|画質をもう少し落としたい。 | |||
|- | |- | ||
| | |2 | ||
|iOS | |iOS | ||
| | |低画質カメラ | ||
| | | | ||
| | |||
| | | | ||
| | | | ||
| | | | ||
| | | | ||
| - | | - | ||
| | |動画のみ。 | ||
|- | |- | ||
| | |3 | ||
|iOS | |iOS | ||
| | |0.3MPCamera | ||
| | |||
| | | | ||
| | | | ||
| | | | ||
| | |480x640 | ||
| | | | ||
| | | - | ||
| | |いまいち。正方形がない。 | ||
|- | |- | ||
| | |3 | ||
|iOS | |iOS | ||
| | |0.3MPCamera | ||
| | |||
| | |||
| | | | ||
| | | | ||
|240x320 | |||
| | | | ||
| | | - | ||
| | |いまいち。正方形がない。 | ||
|- | |- | ||
| | |3 | ||
|iOS | |iOS | ||
| | |0.3MPCamera | ||
| | |||
| | |||
| | | | ||
| | | | ||
|120x160 | |||
| | | | ||
| | | - | ||
| | |いまいち。正方形がない。 | ||
|- | |- | ||
| | |3 | ||
|iOS | |iOS | ||
| | |default | ||
| | | | ||
| | | | ||
|Photo | |||
|12 | |||
|3024x4032 | |||
|2300 | |||
|x | |||
| | | | ||
|- | |- | ||
| | |3 | ||
|iOS | |iOS | ||
| | |default | ||
| | | | ||
| | | | ||
|Photo | |||
|9 | |||
|3024x3024 | |||
|2600 | |||
|x | |||
| | | | ||
|- | |- | ||
| | |3 | ||
|iOS | |iOS | ||
| | |Capera | ||
| | | | ||
| | | | ||
|Max | |||
|12 | |12 | ||
| | |3024x4032 | ||
| | |2300 | ||
| | | - | ||
| | |正方形がない。 | ||
|- | |- | ||
|3 | |3 | ||
|iOS | |iOS | ||
| | |Capera | ||
| | |||
| | |||
|FullHD | |||
| | | | ||
|1920x1080 | |||
| | | | ||
| - | |||
| | | | ||
|- | |- | ||
|3 | |3 | ||
|iOS | |iOS | ||
| | |Capera | ||
| | |||
| | | | ||
|HD | |||
| | | | ||
| | |1280x720 | ||
| | | | ||
| - | |||
| | | | ||
| | |- | ||
|3 | |3 | ||
|iOS | |iOS | ||
| | |Capera | ||
| | | | ||
| | | | ||
|VGA | |||
| | | | ||
|640x720 | |||
| | | | ||
| | | - | ||
| | | | ||
|- | |- | ||
| | |3 | ||
|iOS | |iOS | ||
| | |Capera | ||
| | | | ||
| | | | ||
|CIF | |||
| | | | ||
|352x288 | |||
| | | | ||
| - | | - | ||
| | | | ||
|- | |- | ||
| | |3 | ||
|iOS | |iOS | ||
| | |Lo-Fi Cam | ||
| | |[[/apps.apple.com/bz/app/lo-fi-cam/id1607751695|https://apps.apple.com/bz/app/lo-fi-cam/id1607751695]] | ||
| | |||
| | | | ||
| | | | ||
| | | | ||
|192x144 | |||
| | | | ||
| - | | - | ||
| | |正方形がない。 | ||
|- | |- | ||
| | |3 | ||
|iOS | |iOS | ||
| | |Lo-Fi Cam | ||
|[[/apps.apple.com/bz/app/lo-fi-cam/id1607751695|https://apps.apple.com/bz/app/lo-fi-cam/id1607751695]] | |||
| | | | ||
| | | | ||
| | | | ||
| | |352x288 | ||
| | | | ||
| - | | - | ||
| | |正方形がない。 | ||
|- | |- | ||
| | |3 | ||
|iOS | |iOS | ||
| | |Lo-Fi Cam | ||
|[[/apps.apple.com/bz/app/lo-fi-cam/id1607751695|https://apps.apple.com/bz/app/lo-fi-cam/id1607751695]] | |||
| | | | ||
| | | | ||
| | | | ||
|480x360 | |||
| | | | ||
| | | - | ||
|正方形がない。 | |||
| | |||
|- | |- | ||
| | |3 | ||
|iOS | |iOS | ||
| | |Lo-Fi Cam | ||
|[[/apps.apple.com/bz/app/lo-fi-cam/id1607751695|https://apps.apple.com/bz/app/lo-fi-cam/id1607751695]] | |||
| | | | ||
| | | | ||
| | | | ||
|640x480 | |||
| | | | ||
| | | - | ||
|正方形がない。 | |||
| | |||
|- | |- | ||
| | |3 | ||
|iOS | |iOS | ||
| | |Lo-Fi Cam | ||
|[[/apps.apple.com/bz/app/lo-fi-cam/id1607751695|https://apps.apple.com/bz/app/lo-fi-cam/id1607751695]] | |||
| | | | ||
| | | | ||
| | | | ||
|960x540 | |||
| | | | ||
| | | - | ||
|正方形がない。 | |||
| | |||
|- | |- | ||
| | |3 | ||
|iOS | |iOS | ||
| | |Lo-Fi Cam | ||
|[[/apps.apple.com/bz/app/lo-fi-cam/id1607751695|https://apps.apple.com/bz/app/lo-fi-cam/id1607751695]] | |||
| | | | ||
| | | | ||
| | | | ||
|1280x720 | |||
| | | | ||
| | | - | ||
|正方形がない。 | |||
| | |||
|- | |- | ||
| | |5 | ||
|iOS | |iOS | ||
| | |Simple Cam | ||
| | | | ||
| | | | ||
| | | | ||
| | |0.3 | ||
| | |480x480 | ||
| | |100 | ||
|x | |x | ||
| | |必要な範囲を網羅できている。 | ||
|- | |- | ||
| | |5 | ||
|iOS | |iOS | ||
| | |Simple Cam | ||
| | | | ||
| | | | ||
| | | | ||
|1.2 | |||
|960x960 | |||
|200 | |||
|x | |||
|必要な範囲を網羅できている。 | |||
|- | |||
|5 | |||
|iOS | |||
|Simple Cam | |||
| | | | ||
| | | | ||
| | | | ||
|1.9 | |||
|1200x1200 | |||
|300 | |||
|x | |||
|必要な範囲を網羅できている。 | |||
|- | |||
|5 | |||
|iOS | |||
|Simple Cam | |||
| | |||
| | |||
| | |||
|5 | |||
|1936x1936 | |||
|800 | |||
|x | |x | ||
|必要な範囲を網羅できている。 | |||
|- | |||
|5 | |||
|iOS | |||
|Simple Cam | |||
| | |||
| | | | ||
| | | | ||
|8 | |||
|2448x2448 | |||
|1500 | |||
|x | |||
|必要な範囲を網羅できている。 | |||
|- | |||
|5 | |||
|iOS | |||
|Simple Cam | |||
| | |||
| | |||
| | |||
|12 | |||
| | |||
| | |||
|x | |||
|必要な範囲を網羅できている。 | |||
|- | |||
|3 | |||
|iOS | |||
|MiraCamera | |||
| | |||
| | |||
| | |||
|9 | |||
|3024x3024 | |||
|2700 | |||
|x | |||
|いまいち。 | |||
|- | |||
|3 | |||
|iOS | |||
|Foodie | |||
| | |||
| | |||
|standard | |||
|3 | |||
|1920x1920 | |||
|1600 | |||
|x | |||
|いまいち。 | |||
|- | |||
|3 | |||
|iOS | |||
|SODA | |||
| | |||
| | |||
|standard | |||
|3 | |||
|1920x1920 | |||
|1800 | |||
|x | |||
|いまいち。 | |||
|- | |||
|2 | |||
|iOS | |||
|Pro Camera | |||
| | |||
| - | |||
| | |||
| | |||
| | |||
| | |||
|x | |||
| | |||
|- | |||
|1 | |||
|iOS | |||
|Q Camera | |||
| | |||
|x | |||
| | |||
| | |||
| | |||
| | |||
| - | |||
| | |||
|- | |||
|1 | |||
|iOS | |||
|AutoCam | |||
| | |||
|x | |||
| | |||
| | |||
| | |||
| | |||
| - | |||
| | |||
|- | |||
|2 | |||
|iOS | |||
|SkyCamera | |||
| | |||
| | |||
| | |||
|0.8 | |||
|750x1000 | |||
| | |||
| - | |||
| | |||
|- | |||
|2 | |||
|iOS | |||
|StageCamHD | |||
| | |||
| | |||
| | |||
| | |||
|1280x720 | |||
| | |||
|x | |||
| | |||
|- | |||
|2 | |||
|iOS | |||
|StageCamHD | |||
| | |||
| | |||
| | |||
| | |||
|1920x1080 | |||
| | |||
|x | |||
| | |||
|- | |||
|2 | |||
|iOS | |||
|StageCamHD | |||
| | |||
| | |||
| | |||
| | |||
|3024x3024 | |||
| | |||
|x | |||
| | |||
|- | |||
|2 | |||
|iOS | |||
|StageCamHD | |||
| | |||
| | |||
| | |||
| | |||
|2592x1936 | |||
| | |||
|x | |||
| | |||
|- | |||
|2 | |||
|iOS | |||
|StageCamHD | |||
| | |||
| | |||
| | |||
| | |||
|3264x2448 | |||
| | |||
|x | |||
| | |||
|- | |||
|2 | |||
|iOS | |||
|BeautyPlus | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
|x | |||
| | |||
|} | |||
===== Video ===== | |||
* | * [https://www.youtube.com/watch?v=LFG87sOI05U How To Make Square Videos With An iPhone - YouTube] | ||
* | * [https://ameblo.jp/ruru-rara-life/entry-12796827572.html iPhoneで正方形の動画を撮る方法 | アレルギーでも猫と暮らす!~ミニマルな暮らしでアレルゲンカット~] | ||
* | * [https://www.youtube.com/watch?v=aSP6qo_0Iqk How to Set iPhone Camera Aspect Ratio to Square by Default - YouTube] | ||
標準のカメラアプリで正方形の動画の撮影方法。photoで正方形にして、撮影ボタン長押しで正方形で動画撮影可能。右にスライドでモードロックとのこと。 | |||
カメラアプリの設定で、 [Preserve Settings]-[Creative Controls] でデフォルト正方形を維持できる。 | |||
[https://wccftech.com/record-square-format-videos-iphone/ Record Square Format Videos on iPhone with These Apps] | |||
[https://my-best.com/14485 動画撮影アプリのおすすめ人気ランキング【2024年】 | マイベスト] | |||
[ | |||
正方形の動画撮影アプリ。 | |||
=== | ===== Clips ===== | ||
Apple純正の動画作成ソフト。 | |||
* [https://www.apowersoft.jp/how-to-use-apple-app-clips.html アップル公式アプリClipsの使い方] | |||
[ | * [https://support.apple.com/ja-jp/guide/clips/welcome/ios Clipsユーザガイド - Apple サポート (日本)] | ||
===== Favorite ===== | |||
写真も動画も基本はFILTISTでOK。ただし、ズーム不能なので、ズーム時だけ別アプリを使う。 | |||
* LISTIST=動画・写真=720x720ズームなし。 | |||
* MONOV=動画720x720ズーム。 | |||
* Simple Cam=写真ズーム。 | |||
通常はLISTISTで動画も写真も撮影。ズームが必要な場合だけ、MONOV/Simple Cam。 | |||
ズーム用を1アプリで対応できればよかったのだが、うまいのがない。LINE Cameraが近かったのだけど、動画が最大30 s。惜しかった。しかたない。 | |||
==== | ===== LINE Camera ===== | ||
* [https://mag.app-liv.jp/archive/129101/ LINE Camera(ラインカメラ)の使い方 設定から人気の加工まで徹底解説 -Appliv TOPICS] | |||
[https:// | * [https://nifucreation.com/blog/archives/180 LINEカメラで動画編集はできる?] | ||
正方形で写真と動画に対応。サイズも大きすぎない。ズームも対応。ただし、動画は30 sまで。これが惜しい。 | |||
==== QR ==== | |||
Ref: [https://news.mynavi.jp/article/20220214-ipadiphonehacks/ QRコードで開いたWEBサイトの履歴がiPhoneで残らない問題、これで解決 | マイナビニュース]. | |||
QRコードを読み取ると、QRコードリーダーアプリ内ブラウザーで開けれて、Safariの履歴に残らない。開いた後に、右下でSafariで開き直すと、タブで開き直せる。基本はすぐ開き直したほうがいい。 | |||
いや、標準のQRコードリーダーで開いた後に、Safariで開き直すと、状態が違うのか、吉野家のレシートアンケートなどはエラーになる。サードパーティーアプリを使ったほうがいい。 | |||
[https://app-liv.jp/hobbies/images/2941/ QRコードアプリおすすめ2選&ランキングTOP10 無料・人気のアプリを編集部が厳選!【2024年】 | iPhone/Androidアプリ - Appliv] | |||
[https:// | |||
QRQRがいい。 | |||
=== Other === | |||
==== エクスプレスカード ==== | |||
[https://www.pasmo.co.jp/mp/app/use/express/ エクスプレスカード(Face ID等なしで利用する)|Apple PayのPASMO] | |||
[Wallet]-任意のカード-[Card Details]-[Express Transit] | |||
ここがOnだと本体をかざすだけで、アプリを起動することなく決済可能。 | |||
1枚しか設定できない。 | |||
iPhoneの電池が切れても一定時間は使用可能。 | |||
==== 近接センサー ==== | |||
* https://chatgpt.com/share/680ea770-2af4-800b-9bdf-d13c66ce8381 | |||
* [https://iphone-shuuri.jp/blog/kawagoe/9938/ iPhoneの近接センサーとは?壊れたらどうする?故障原因と対処法について - スマホ修理ジャパン川越店ブログ] | |||
通話中に、耳を話すと、勝手に画面ロックになったり、画面操作中に強制的に真っ黒になってまともに操作できない。 | |||
IPhoneの上部中心に近接センサーがあって、これで制御されているらしい。 | |||
[Settings]-[Accessibility]-[Touch]-[Prevent Lock to End Call]=trueに変更する。これで電源ボタンを押しても通話は中断しない。 | |||
これでましになった気がする。 | |||
==== 着信拒否 ==== | |||
[https://iphone.f-tools.net/QandA/Tyakusin-kyohi.html iPhoneで着信拒否やメール拒否] | |||
着信拒否している場合、着信が入らず、ツーツーとなる。模様。転送やアナウンスがない。それがポイント。 | |||
== Windows == | |||
=== | === Other === | ||
==== | ==== IME ==== | ||
https:// | [https://senooken.jp/post/2016/04/03/2567/ MS IMEでIMEのオン/オフの切り替え快適化 – senooken JP] | ||
右下IMEアイコンを右クリック-[設定]-[キーとタッチのカスタマイズ]‐[キーの割り当て] | |||
=== | * [各キー/キーの組み合わせに好みの機能を割り当てます]=オン | ||
* 無変換キー=IME-オフ | |||
* 変換キー=IME-オン | |||
==== | ==== 高速スタートアップ ==== | ||
出典: | |||
* [https://cocotiie.com/windows10-battery/ Windows シャットダウンしてもバッテリー 減る | cocotiie] | |||
* [https://www.fmworld.net/cs/azbyclub/qanavi/jsp/qacontents.jsp?PID=2111-3152 富士通Q&A - [Windows 11] 高速スタートアップを無効にする方法を教えてください。 - FMVサポート : 富士通パソコン] | |||
電源オフにしているのに、バッテリーが何故か減っている。原因は [高速スタートアップ] とのこと。 | |||
[コントロールパネル]-[ハードウェアとサウンド]-[電源オプション]-[電源ボタンの動作を選択する]-[現在利用可能ではない設定を変更します]-[シャットダウン設定]-[高速スタートアップを有効にする (推奨)] をオフにする。 | |||
==== | ==== 勝手にスリープする ==== | ||
* [https://atmarkit.itmedia.co.jp/ait/articles/1803/22/news018.html 【Windows 10/11】PCが数分で勝手にスリープするのを防ぐ:Tech TIPS - @IT] | |||
システムがすぐにスリープしてしまうのは、「システム無人スリープタイムアウト(System unattended sleep timeout)」機能が働いているためだと考えられる。これは、システムがWOL(Wake On LAN)や何らかのイベントなどで、自発的にスリープから起動した場合、そのまま何も操作せずに放っておくと、一定時間後にまた自動的にスリープ状態に移行するための機能である。 | |||
システム無人スリープのタイムアウトを設定する項目を有効化するには、コマンドプロンプトで以下のpowercfgコマンドを実行すればよい。再起動などは必要なく、[電源オプション]にタイムアウトを設定する項目が表示される。 | |||
powercfg -attributes SUB_SLEEP 7bc4a2f9-d8fc-4469-b07b-33eb785aaca0 -ATTRIB_HIDE | |||
これだとダメ。 | |||
一応元に戻す。 | |||
powercfg -attributes SUB_SLEEP 7bc4a2f9-d8fc-4469-b07b-33eb785aaca0 +ATTRIB_HIDE | |||
「[https://techmemo.biz/sw/windows10-stop-sleep/ Windows10で勝手にスリープになる現象を防ぐための対処法 | TechMemo]」 | |||
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\238C9FA8-0AAD-41ED-83F4-97BE242C8F20\7bc4a2f9-d8fc-4469-b07b-33eb785aaca0 | |||
このレジストリーの値を0から2に変更する。 | |||
システム無人スリープタイムアウトが表示されるので0にするとなくなる。らしい。 | |||
そのほか、ディスプレイの電源を切るのはやはりだめ。パソコンの省エネ機能が働いて、処理が止まる。 | |||
==== Startup ==== | |||
Microsoft TeamsなどOSの起動時に勝手に自動起動するアプリがある。制御する方法がいくつかある。 | |||
[設定]-[アプリ]-[スタートアップ] で制御できる。大半はこれで制御できる。 | |||
ほかに、Explorerのshell:startupか%USERPROFILE%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startupにショートカットがあると、それでも自動起動する。 | |||
==== 録音 ==== | |||
[https://www.notta.ai/blog/windows-voice-recorder Windows10で録音がしたい!ボイスレコーダーを使用した音声の録音方法を解説] | |||
プレインストールのボイスレコーダーで録音できる。 | |||
=== Theme === | |||
Ref: [https://dynabook.com/assistpc////faq/pcdata3/018879.htm デスクトップのテーマを変更する方法<Windows 11>|サポート|dynabook(ダイナブック公式)]. | |||
OSのテーマでデフォルトのライト・ダークが決まる。 | |||
[スタート]-[設定]-[個人用設定] | |||
===== | === Hardware === | ||
==== Keyboard ==== | |||
Ref: [https://www.fmworld.net/cs/azbyclub/qanavi/jsp/qacontents.jsp?PID=0111-3165 FMV Q&A - [Windows 11] キーを押し続けたときに、同じ文字が連続して入力される速度を調整する方法を教えてください。 - FMVサポート : 富士通パソコン]. | |||
[ | [コントロールパネル]-[キーボード]-[速度] | ||
* 文字の入力 | |||
** 表示までの待ち時間 (デフォルト3/4)=4/4 | |||
==== | ==== Mouse ==== | ||
[ | [コントロールパネル]-[マウス] | ||
* ポインター オプション | |||
** ポインターの速度を選択する (デフォルト=左から6 (6/11)) | |||
** ☑ポインターを自動的に既定のボタンの上に移動する。 | |||
** ☑Ctrlキーを押すとポインターの位置を表示する。 | |||
コントロール パネル\すべてのコントロール パネル項目\コンピューターの簡単操作センター\マウスを使いやすくします | |||
* マウスポインター | |||
=== Explorer === | |||
==== 表示 ==== | |||
[ファイル]-[オプション]-[フォルダーオプション]-[表示] | |||
* | * ファイルおよびフォルダー | ||
* | ** ☑チェックボックスを使用して項目を選択する。 | ||
* | ** ファイルとフォルダーの表示 | ||
* | *** ☑隠しファイル、隠しフォルダー、および隠しドライブを表示する。 | ||
* | *** □登録されている拡張子は表示しない | ||
* | |||
* | === WSL === | ||
==== http_proxy ==== | |||
[Linux 用 Windows サブシステム設定]-[ネットワーク]-[オート プロキシが有効]=オンだと、wslやubuntu上でhttp_proxy/HTTP_PROXYの環境変数が自動的に設定される。 | |||
混乱するのでオフでいいと思う。 | |||
== Mac == | |||
=== Application === | |||
==== Applications ==== | |||
Macの実行ファイルは.appファイル。これは/Applicationsに配置されている。Laucnhpadはこのディレクトリー内を表示している模様。 | |||
==== | ==== Uninstall ==== | ||
https://support.apple.com/ja-jp/ | [https://support.apple.com/ja-jp/102610 Mac でアプリをアンインストールする - Apple サポート (日本)] | ||
いくつか方法がある。 | |||
App Storeからインストールしたアプリの場合、Launchpadを開いて該当アプリを表示して、ドラッグすると左上に×ボタンが表示されるので、これをクリックするとアンインストールになる。 | |||
AppStore以外の場合、Finderから該当ファイルを削除する。/Applicationsか$HOME/Applicationsを開いて該当アプリ.appを削除する。 | |||
=== System === | |||
==== | ==== スリープの無効化 ==== | ||
[https://recoverit.wondershare.jp/mac-tips/how-to-keep-imac-and-macbook-from-sleeping.html 【Macユーザー必見】iMac・MacBookをスリープさせない方法] | |||
長時間コマンドの実行などで、パソコンをスリープにしたくないことがある。以下の設定を変更することで対応できる模様。 | |||
* [System settings] | |||
** [Lock Screen]: [Start Screen Saver when inactive]=false: これでスリープ無効? | |||
** [Battery]-[Options]: Prevent automatic sleeping on power adapter when the display is off=true これでパソコンの蓋を閉じてもスリープにならない。 | |||
これらでもダメなら、素直にYouTube動画をループ再生するとかで、稼働を継続させる。 | |||
他に、caffeinate -iコマンドの実行がある。 | |||
* [https://qiita.com/hakuro/items/c2302f1ad83bf3424a1a caffeinateコマンドでMacの自動スリープを抑制する #MacOSX - Qiita] | |||
* [https://qiita.com/yanagih/items/cda860c330f1322909c2 カフェインでMacを眠らせない! #macOS - Qiita] | |||
caffeinate -iを実行すると、C-cで中断するまでずっとスリープを抑止するらしい。 | |||
==== Mouse ==== | |||
マウスポインター速度 macデフォルト4/10。 | |||
===== DiscreteScroll ===== | |||
* [http://www.neko.ne.jp/%7Efreewing/software/macos_disable_mouse_wheel_scroll_acceleration/#google_vignette Macのマウスホイールの加速度を無効にして Windowsと同じ動きにする方法、macOSのクソな UI動作仕様を修正 (macOSのマウスホイールのスクロールの加速度の動きにはイラついている人が世界中に大勢居ます)] | |||
* [https://github.com/emreyolcu/discrete-scroll GitHub - emreyolcu/discrete-scroll: Fix for macOS's unnecessary scroll wheel acceleration] | |||
Macのマウスホイールのスクロールは加速度に応じる。高速に動かすと移動量が増える。指が疲れる。 | |||
加速度を無視して、Windows同様に一定量の移動にしてくれるのが、DiscreteScroll。 | |||
==== lanchctl ==== | |||
[ | * [https://qiita.com/hoisjp/items/19374252db8e748c3407 Macでの環境変数(environment variables)の設定方法 #MacOSX - Qiita] | ||
* [https://gist.github.com/kozy4324/5552217 launchd, launchctlについて(導入編) · GitHub] | |||
* [https://amachang.hatenablog.com/entry/20080108/1199778615 Mac の launchctl ってなんだ? - IT戦記] | |||
* [http://www.maruko2.com/mw/LaunchDaemons_(launchctl,_launchd.plist)_%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9 LaunchDaemons (launchctl, launchd.plist) の使い方 - maruko2 Note.] | |||
Macでシステム起動時の処理を管理する仕組み。Mac OS 10.10以上で導入されている。 | |||
GUIなど、システムグローバルで環境変数を反映させたい場合、ここに登録する必要がある。 | |||
plistファイルを作成して、それをlanchctl loadして登録になる。unloadで解除になる。 | |||
* plistのファイルのパスは、主に以下2通り。 | |||
** <code>/Library/LaunchAgents/*****.plist</code> : システム全体で有効になる。 | |||
=== | ** <code>~/Library/LaunchAgents/*****.plist</code> : ログインユーザのみで有効になる。 | ||
<syntaxhighlight lang="xml"> | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | |||
<plist version="1.0"> | |||
<dict> | |||
<key>Label</key> | |||
<string>setenv.M2_HOME</string> | |||
<key>ProgramArguments</key> | |||
<array> | |||
<string>/bin/launchctl</string> | |||
<string>setenv</string> | |||
<string>M2_HOME</string> | |||
<string>/usr/local/Cellar/maven31/3.1.1/libexec</string> | |||
</array> | |||
<key>RunAtLoad</key> | |||
<true/> | |||
<key>ServiceIPC</key> | |||
<false/> | |||
</dict> | |||
</plist> | |||
</syntaxhighlight>上記のような形式。 | |||
配置したら、コマンドで即座に反映できる。 | |||
launchctl load ~/Library/LaunchAgents/SSLKEYLOGFILE.plist | |||
値を修正した場合、一度unloadしてからloadする。 | |||
==== Finder ==== | |||
==== | ===== 拡張子の表示 ===== | ||
https://support.apple.com/ja-jp/guide/mac-help/mchlp2304/mac | |||
# MacのFinder で、「Finder」>「設定」と選択してから、「詳細」をクリックします。 | |||
# 「すべてのファイル名拡張子を表示」を選択するか選択を解除します。 | |||
==== Screenshot ==== | |||
===== 場所の変更 ===== | |||
https://support.apple.com/ja-jp/guide/mac-help/mh26782/mac | |||
起動中の [オプション] で選べる。 | |||
===== | ===== 保存形式の変更 ===== | ||
https://www.pc-koubou.jp/magazine/76550 | |||
defaults write com.apple.screencapture type jpg | |||
戻すとき。 | |||
defaults write com.apple.screencapture type png | |||
==== IME ==== | |||
===== ¥と\ ===== | |||
[ | * [https://qiita.com/minattoo/items/1ce084614246764187c3 Macでバックスラッシュ "\"が打てない時の対処法 #Keyboard - Qiita] | ||
* [https://note.com/nonnonlife/n/n6a2ddb5191bd 【Mac】デフォルトの"¥"キー入力を「\」に変更する方法|NonNonLife] | |||
Macだと¥キーを入力すると¥が入力される。この文字を使うことはほぼなくて、バックスラッシュを入力したい。option-¥で入力できるが面倒。設定で変更できる。 | |||
[ | # [システム設定]-[キーボード]-[入力ソース]-[編集] | ||
#[日本語] | |||
[ | ##☑️英字 | ||
##["¥"キーで入力する文字]=\ | |||
# [ABC]-[-]で削除する。 | |||
[ABC]の削除がポイント。ただ、これをするとcontrol-3で絵文字が出る問題がある。ABCは戻した方がいいかも。 | |||
[ | ==== 絵文字を表示 ==== | ||
[https://zenn.dev/ctxzz/articles/0bcc4acaa9b1b5 【Mac】Control+3で顔文字リストが表示されるショートカットキーを変更する方法] | |||
キーボードの入力ソースが日本語だとこの問題が起こる。 | |||
他のショートカットキーの割り当てで無効にできるとの情報があったが、Mac 15.3.1では無効にならず。諦める。 | |||
===== Google日本語入力のアンインストール ===== | |||
[https://www.drbuho.com/jp/how-to/uninstall-google-japanese-input-on-mac 【助かった】MacでGoogle日本語入力を完全にアンインストールする方法] | |||
# [System settings]-[Keyboard]-[Text input]-[Input Sources]-[Edit] を選ぶ。 | |||
# Google日本語入力の項目を選んで[-]を選ぶ。 | |||
# Finderで[Application]ディレクトリーを開いて[Google日本語入力]を削除する。 | |||
===== 変換Enter 2回 ===== | |||
[https://ischool.co.jp/2019-08-05-japanese-input-in-mac-how-to-convert-at-once-instead-of-twice/ Mac日本語入力、エンター2回でなく1回で変換する方法 | iSchool合同会社] | |||
MacのIMEは変換後確定にEnter2回必要。これが面倒。1回にすることができる。 | |||
[システム設定]-[キーボード]-[入力ソース]-[編集]-[日本語]-[☑️Windows風のキー操作] | |||
これで1回で済む。 | |||
===== | ===== ライブ変換オフ ===== | ||
[https:// | [https://easytouse.jp/2018/01/23/mac-liveconversion-off/#:~:text=%E3%83%A9%E3%82%A4%E3%83%96%E5%A4%89%E6%8F%9B%E3%82%92%E3%82%AA%E3%83%95%E3%81%AB%E3%81%99%E3%82%8B%E6%89%8B%E9%A0%86&text=%E7%92%B0%E5%A2%83%E8%A8%AD%E5%AE%9A%E3%81%AE%E3%80%8C%E3%82%AD%E3%83%BC%E3%83%9C%E3%83%BC%E3%83%89%E3%80%8D%E3%82%92,%E5%A4%89%E6%8F%9B%E3%80%8D%E3%81%AE%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF%E3%82%92%E5%A4%96%E3%81%99%E3%80%82 Macの「ライブ変換」機能をOFFにする方法 – Easytouse] | ||
デフォルトでライブ変換で自動変換してくれる。が、これが期待と違うことがあってイライラするのでオフにする。 | |||
[システム設定]-[キーボード]-[入力ソース]-[編集]-[日本語]-[▫️ライブ変換] | |||
これでオフにすればOK。 | |||
==== | ===== 追加辞書 ===== | ||
[https://support.apple.com/ja-jp/guide/japanese-input-method/jpim10226/mac Macの追加辞書に読み込むためのテキストファイルを作成する - Apple サポート (日本)] | |||
単語の読み<code>,</code>単語<code>,</code>品詞<code>,</code>(<code>,,</code>メモ) | |||
{| class="wikitable" | |||
! colspan="4" |要素 | |||
! colspan="8" |説明 | |||
|- | |||
| colspan="4" |単語の読み | |||
| colspan="8" |単語の読みをひらがなで入力します。長さは32文字以下にする必要があります。 | |||
単語にASCIIカンマやスペースを含める場合は、単語を引用符(“”)で囲みます。 | |||
==== | 単語にASCII引用符(")を入力する場合は、単語を1バイトの引用符で囲み、1バイトの引用符の周囲に連続する2つの1バイトの引用符を入力します。 | ||
|- | |||
| colspan="4" |単語 | |||
| colspan="8" |目的の変換結果を入力します。1つの単語の長さは64文字以下にする必要があります。単語には、Unicodeコンソーシアムで定義されている文字と記号であれば、どれでも使用できます。 | |||
|- | |||
| colspan="4" |品詞 | |||
| colspan="8" |次のいずれかの[[/support.apple.com/ja-jp/guide/japanese-input-method/jpim10211/6.3/mac/15.0|品詞]]を指定します: | |||
* 普通名詞 | |||
* サ変名詞 | |||
* 人名 | |||
* 地名 | |||
* 形容詞 | |||
* 副詞 | |||
* 接尾語 | |||
* 動詞 | |||
* その他すべての品詞 | |||
|- | |||
| colspan="4" |メモ | |||
| colspan="8" |メモはオプションです。メモの前には2つのASCIIカンマ(<code>,,</code>)を入力します。メモはユーザ辞書には登録されません。 | |||
|} | |||
これで登録する。登録手順。 | |||
# [設定]-[キーボード]-[テキスト入力]-[入力ソース]-[編集] | |||
# [日本語-ローマ字入力]-[追加辞書] | |||
# ここにドラッグ・ドロップするか、右クリック-[辞書をインストール] を選ぶ。 | |||
[https://discussionsjapan.apple.com/content/attachment/b2e76e0d-706b-430c-8902-b489756817ae 入力ソースの追加辞書の部分がグレーにな… - Apple コミュニティ] | |||
/ | |||
登録方法に癖がある。 | |||
# 辞書ファイルの拡張子はtxt | |||
# 品詞の指定が重要。基本は普通名詞。 | |||
==== | ==== Keybind ==== | ||
https://support.apple.com/ja-jp/102650 | |||
{| class="wikitable" | |||
|+ | |||
! | |||
!キー | |||
!内容 | |||
! | |||
|- | |||
| | |||
|option-command-電源 | |||
option-command-メディア取り出しキー | |||
|スリープ | |||
| | |||
|- | |||
| | |||
|C-command-q | |||
|ロック | |||
| | |||
|- | |||
| | |||
| | |||
| | |||
| | |||
|} | |||
=== | ===== fn ===== | ||
[https://support.apple.com/ja-jp/102439 Mac でファンクションキーを使う方法 - Apple サポート (日本)] | |||
F1-F12キーはデフォルトではMac専用機能の割り当てになっている。 | |||
fnキーとの同時押しでFn自体の機能になる。デフォルトでFnにしたい場合、設定で変更する。 | |||
[ | [システム設定]-[キーボード]-[キーボードショートカット]-[ファンクションキー]-[F1、F2などのキーを標準のファンクションキーとして使用]=on | ||
==== | ==== Keychain ==== | ||
Macのキーチェーンアクセスとは? | |||
https://support.apple.com/ja-jp/guide/keychain-access/kyca1083/mac | |||
「macOS」で「キーチェーンアクセス」を使う--パスワードを見つけて変更するには | |||
https://japan.zdnet.com/article/35190535/ | |||
dockのkeychainアプリでMacのパスワードマネージャー。KeePassXCと似たようなことができる。OS標準だから安全・安心? | |||
==== Passwords ==== | |||
Apple、今秋リリース予定のiPhoneとMacに新しいパスワードアプリ搭載 | |||
https://news.mynavi.jp/techplus/article/20240613-2964379/ | |||
2024年秋に [Passwords] という新しいOSアプリが登場。従来のKeychainをベースに、WiFiパスワードなど一元管理のためのアプリの模様。 | |||
こちらを使うのが良さそう。 | |||
[システム設定]-[パスワード] からアクセスする模様。 | |||
==== Touch ID ==== | |||
[https://support.apple.com/ja-jp/guide/mac-help/mchl16fbf90a/mac MacでTouch IDを使用する - Apple サポート (日本)] | |||
Touch IDを使うことで、指紋認証を利用できる。 | |||
[System settings]-[Touch IDとパスワード]-[Touch ID]-[指紋を追加] | |||
=== Finder === | |||
==== Trashのサイドバー・ブックマーク表示 ==== | |||
Macのゴミ箱 (Trash) の扱いが特殊。実態は、~/.Trashにある。ただ、HOMEディレクトリーで、C-<で隠しファイル表示にしてもFinderから表示できない。なので、ドラッグドロップでサイドバーにブックマーク表示もできない。Finderから直接アクセスできないのが使いにくい。 | |||
サイドバーに表示する方法があった ([https://www.reddit.com/r/MacOS/comments/16g8dgc/how_do_i_get_trash_to_show_in_a_finder_window/ How do I get Trash to show in a finder window sidebar? : r/MacOS])。 | |||
Trashを開いた後に、[File]-[Add to Sidebar] を選ぶ。これだけ。 | |||
==== | ==== フォルダーを先頭表示 ==== | ||
[https://pc.watch.impress.co.jp/docs/column/macinfo/1339186.html 【Mac Info】Finderのファイル操作術をさらに極めるカスタマイズ20選 〜Macのキホン Vol.2 - PC Watch] | |||
Finderの設定でフォルダー・ディレクトリーを常に先頭にソート表示する設定がある。 | |||
[Settings]-[Advanced]-[Keep folders on top] の以下の2項目をオンにする。 | |||
* In windows when sorting by name | |||
* On Desktop | |||
==== 検索場所のデフォルトを現在フォルダーに変更 ==== | |||
[https://pc.watch.impress.co.jp/docs/column/macinfo/1339186.html 【Mac Info】Finderのファイル操作術をさらに極めるカスタマイズ20選 〜Macのキホン Vol.2 - PC Watch] | |||
[Settings]-[Advanced]-[When performing a search]=[Search the Current Folder] にする。 | |||
===== | ==== ツールバーアプリ ==== | ||
===== ツールバーへのアプリ登録 ===== | |||
* [https://pc.watch.impress.co.jp/docs/column/macinfo/1339186.html 【Mac Info】Finderのファイル操作術をさらに極めるカスタマイズ20選 〜Macのキホン Vol.2 - PC Watch] | |||
* [https://www.maxi-design.jp/blog/2771/ Mac Finderのツールバーにアプリを登録する方法 - MAXI design Blog] | |||
* | |||
Finderのツールバーにアプリを登録できる。よく使うアプリはここに配置すると時短になる。 | |||
appファイルをCommandの同時押しドラッグ・ドロップで配置できる。削除は同じくCommand同時押しのドラッグ・ドロップで画面外。 | |||
右クリックメニューのクイックアクションがわりで使える。 | |||
===== 右クリックでファイルを新規作成 ===== | |||
* https://chatgpt.com/c/6775258d-a874-800b-9472-1f7095f28b95 | |||
# | * [https://qiita.com/sugasaki/items/d52c33ea8ad6b74c052e Mac > 右クリックでテキストファイル作成 #Mac - Qiita] | ||
* [https://j-wort.hatenadiary.org/entries/2012/12/23 Mac OSXで右クリックで新規ファイルを作成] | |||
# | * [https://itips.krsw.biz/macos-how-to-create-new-text-from-right-click-menu/ 【簡単】Macで右クリックからテキストを新規作成する方法 - ITips] | ||
* [https://qiita.com/ai-tora/items/f71b01b7796716bc33f0 macOSでFinderの右クリックから新規テキストファイルを作成する #Mac - Qiita] | |||
デフォルトでこれはできない。 | |||
いくつか方法があるが、Automatorにtouchコマンドを登録するのが一番簡単そう。 | |||
[Launchpad]-[Automator]-[Quick Action]-[Choose] | |||
Workflow receives current=files or folders | |||
[Library]-[Run Shell Script] | |||
touch "$1/f.txt" | |||
[File]-[Save] | |||
Save quick action as: New file | |||
[Save] | |||
この方法はいまいち。ファイルかディレクトリーを右クリック必要。 | |||
* [https://weekly.ascii.jp/elem/000/002/618/2618034/ OS Xで右クリックからテキストファイルを新規作成するには?|Mac - 週刊アスキー] | |||
* [https://www.guri2o1667.work/entry/2024/04/14/%E3%80%90Mac%E3%80%91Finder%E3%81%AE%E5%8F%B3%E3%82%AF%E3%83%AA%E3%83%83%E3%82%AF%E3%81%A7%E4%BB%BB%E6%84%8F%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%EF%BC%88txt%2Cxlsx%2Cdocx%2Cpptx%E7%AD%89%EF%BC%89 【Mac】Finderの右クリックで任意のファイル(txt,xlsx,docx,pptx等)を作成する方法 - 自由気ままに書いちゃおう] | |||
うまい方法を発見。「[https://discussionsjapan.apple.com/thread/10109192?sortBy=rank Finder ファイル作成 - Apple コミュニティ]」にあるように、スクリプトエディターでAppleScriptをアプリケーション形式 (.app) で保存して、Command推しながらドロップでFinderのツールバーにランチャーを登録できる。右クリックではないが、やりたいことを簡単に実現できる。これがいい。 | |||
上記のAppleScriptは構文エラーで動作しなかったので、「[https://mogmo811.hatenablog.com/entry/2020/08/15/091020 AppleScript|Finderで右クリックから新規ファイルを作成する - mogmo .NET]」を参考に修正した。 | |||
[https:// | |||
1 以下の内容のNewFile.scptを作成する。 | |||
tell application "Finder" | |||
set theFile to (insertion location as text) & "Untitled.txt" | |||
set touchScript to "touch " & quoted form of (POSIX path of theFile) | |||
do shell script touchScript | |||
end tell | |||
2 [Launchpad]-[Script Editor] を起動してNewFile.scptを開く。 | |||
3 [File]-[Export]-[File Format]=[Application]-[Save] を選ぶ。 | |||
4 作成されたNewFile.appをFinderのツールバーにCommandキー同時押しでドラッグ・ドロップ。 | |||
5. 新規ファイルを作成したい場合に、ツールバーのNewFile.appをクリックする。 | |||
=== | ===== Terminal ===== | ||
[https://discussions.apple.com/thread/251250987?sortBy=rank Add Service to Finder Toolbar? - Apple Community] | |||
現在フォルダーを端末で開きたいことがよくある。ツールバーアプリにするといい。 | |||
Terminal.scptなどの名前で以下のファイルを用意する。<syntaxhighlight lang="applescript"> | |||
tell application "Finder" | |||
set myWin to window 1 | |||
set thePath to (quoted form of POSIX path of (target of myWin as alias)) | |||
tell application "Terminal" | |||
activate | |||
tell window 1 | |||
do script "cd " & thePath | |||
end tell | |||
end tell | |||
end tell | |||
</syntaxhighlight>Script Editorで開いてappにエクスポートして登録する。 | |||
=== Developer === | |||
==== Automator ==== | |||
Macの自動化のツール。 | |||
===== 格納場所 ===== | |||
[https://www.guri2o1667.work/entry/2024/04/14/%E3%80%90Mac%E3%80%91Finder%E3%81%AE%E5%8F%B3%E3%82%AF%E3%83%AA%E3%83%83%E3%82%AF%E3%81%A7%E4%BB%BB%E6%84%8F%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%EF%BC%88txt%2Cxlsx%2Cdocx%2Cpptx%E7%AD%89%EF%BC%89 【Mac】Finderの右クリックで任意のファイル(txt,xlsx,docx,pptx等)を作成する方法 - 自由気ままに書いちゃおう] | |||
~/Library/Servicesに格納される。 | |||
==== AppleScript ==== | |||
# | * [https://qiita.com/satosystems/items/8fff5b2313ecd6f81af3 初めての Apple Script #AppleScript - Qiita] | ||
* [https://support.apple.com/ja-jp/guide/script-editor/welcome/mac Mac用スクリプトエディタユーザガイド - Apple サポート (日本)] | |||
* [https://www.script-factory.net/monologue/AppleScriptIntroduction/index.xhtml Script factory : AppleScript ことはじめ] | |||
WindowsのWSH相当。1993年の昔からある。 | |||
Script Editorでappファイルなどに変換できたりする。Macの自動化で重要なスクリプト言語。 | |||
==== CommandLineTools ==== | |||
/Library/Developer/CommandLineTools/のあたりにgitなどのOS標準の開発ツール類がある。 | |||
他に、/Applications/Xcode.app にもあったりする。 | |||
=== Package Manager === | |||
==== Homebrew ==== | |||
[https://brew.sh/ Homebrew — The Missing Package Manager for macOS (or Linux)] | |||
===== Install ===== | |||
/bin/bash -c "$(curl -fsSL <nowiki>https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh</nowiki>)" | |||
これで/optにインストールされる。 | |||
最後にstdinに表示される以下のコマンドを実行してPATHを追加する。 | |||
echo >> /Users/z.ken.senoo/.bash_profile | |||
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> /Users/z.ken.senoo/.bash_profile | |||
eval "$(/opt/homebrew/bin/brew shellenv)" | |||
=== Other === | |||
==== 破損App ==== | |||
[https://qiita.com/quattro_4/items/f5b56c1897c0cc235c0f Macで"壊れているため開けません"の古いappを開く #Mac - Qiita] | |||
xattr -rc /Applications/LegacyAwesome.app | |||
これで属性を除去して解決することが多い。 | |||
==== Terminalが予期しない理由で終了しました ==== | |||
[https://qiita.com/koma3/items/5df98663463571a14272 MAC「Terminalが予期しない理由で終了しました」のポップが出てターミナルが起動できない #Mac - Qiita] | |||
# | |||
[~/Saved Application State/com.apple.Terminal.savedState] を改名したら起動できた。詳細不明。 | |||
==== | ==== 画像の一括リサイズ ==== | ||
https://chatgpt.com/share/6810e6d6-b388-800b-8d38-2beda0da7552 | |||
# プレビューアプリでまとめて開いて、サムネイルを全選択。 | |||
# [Tool]-[Adjust size] | |||
これで一括リサイズできる。 | |||
==== Photos ==== | |||
iPhoneとMacで共通の写真管理アプリ。クラウドで共有される。 | |||
===== ファイル取得 ===== | |||
https://chatgpt.com/share/680b7873-4f00-800b-9049-03648eb29aef | |||
使い方に癖がある。画像はExportで取得しないとファイルとして取得できない。 | |||
===== 複数画像のPDFへの統合 ===== | |||
* [https://pdf.wondershare.jp/pdf-trim/combine-images-in-pdf-on-mac.html Macで複数の画像をまとめてPDFにする無料方法] | |||
* [https://support.apple.com/ja-jp/guide/mac-help/mchl21ac2368/mac MacでファイルをPDFに結合する - Apple サポート (日本)] | |||
いくつか方法がある。 | |||
# Previewアプリでまとめて開いて、Printで印刷画面でPDFに保存する。 | |||
# Finderで対象ファイルを選択-[右クリック]-[Quick actions]-[Create PDF]。 | |||
2番目のQuick actionsが一番簡単。 | |||
===== 画像の同期 ===== | |||
[Sharing]-[Shared Albums] に共有用のアルバムを作って、そちらに画像をドラッグ・ドロップで設定する。すると、iPhoneのPhotosでもこれらの画像にアクセス可能になる模様。 | |||
これが画像の同期手っ取り早い。 | |||
== UNIX == | |||
=== Other === | |||
==== cron ==== | |||
===== | ===== About ===== | ||
* | * [https://ja.wikipedia.org/wiki/Cron cron - Wikipedia] | ||
* [https://pubs.opengroup.org/onlinepubs/9699919799.2008edition/utilities/crontab.html crontab] | |||
* | |||
UNIX系OSのジョブ管理ツール。タスクの定期実行を可能にする。 | |||
cronの名前は時間を意味するギリシア語chronosに由来する。 | |||
指定した時間に1回だけ実行するなら、atがある。電子メールの送信などで役立つ。 | |||
===== | ===== Format ===== | ||
cronの動作はcrontab (cron table) ファイルで指定する。 | |||
以下の形式になっている。 | |||
# ┌───────────── 分(0〜59) | |||
# │ ┌───────────── 時(0〜23) | |||
# │ │ ┌───────────── 日(1〜31) | |||
# │ │ │ ┌───────────── 月(1〜12)JAN-DEC | |||
# │ │ │ │ ┌───────────── 曜日(0〜6〈日〜土〉、一部のシステムでは7も日曜日) SUN-SAT | |||
# │ │ │ │ │ | |||
# │ │ │ │ │ | |||
* | # * * * * * [予約するコマンド] | ||
* | 日時部分はいくつか指定方法がある。 | ||
* | **: すべて。 | ||
* | */n: nごとに実行 (*/5)。 | ||
* | *,: 複数の時間間隔を指定 (1,2,3) | ||
*-: 範囲。 | |||
* | * %: コマンド内の%はエスケープされていないと改行文字に変換され、標準入力としてコマンドに渡される。 | ||
* | ユーザーはcrontab -eで自分の設定ファイルを編集できる。crontabファイルの直接編集は非推奨で、crontabコマンドでの修正が推奨されている。 | ||
* | |||
* | ファイルの他に標準入力も受け付ける。 | ||
* | |||
* - | ===== Command ===== | ||
* | *編集: crontab -e | ||
*表示: crontab -l | |||
*削除: crontab -r | |||
-u: 実行ユーザー指定。 | |||
オプションを指定しない場合、引数のファイルの内容のcronを実行する。引数がなければ標準入力。 | |||
* - | |||
* - | 既存のcrontabの内容を編集したい場合、方法が2種類ある。 | ||
* - | |||
# crontab -e | |||
# (crontab -l ; echo ) | crontab: crontab -lで現在のcrontabの内容が出力されるので、これを加工してcrontabに再度流し込む。 | |||
# crontab [file] | |||
2の方法は融通が利く。crontab [file] でファイルにcrontabの内容を記載しておいて、これをVCSで管理というのも悪くはない。 | |||
===== Log ===== | |||
/var/log/cron | |||
[https://askubuntu.com/questions/85558/verify-if-crontab-works cron - Verify if crontab works - Ask Ubuntu] | |||
デーモン自体の確認は以下。 | |||
systemctl status cron | |||
systemctl restart cron | |||
cronへの登録時のコマンドが標準出力を持つ場合、メールでユーザーに内容を送信する。 | |||
この挙動が鬱陶しいので、cronへの登録時にログを全て破棄するような設定が奨励されることがある。 | |||
>/dev/null 2>&1 | |||
[https://qiita.com/onomame/items/71646c5517a39bcd01cc crontabのガイドライン #CentOS - Qiita] | |||
ただ、全部捨てると失敗時も、いつから失敗しているかの情報も一切わからない。残したほうがいい。 | |||
>>/var/log/log_$(date +\%Y\%m\%d).log 2>&1 | |||
==== | ===== 環境変数 ===== | ||
POSIXにあるように、HOME/LOGNAME/PATH/SHELLのみが最低限デフォルト値が用意されていて存在が保証される。 | |||
cronの環境変数。 | |||
echo '* * * * * env >/tmp/env.log' | crontab | |||
FROM php:7.3.23-apacheのDebian 10の場合。 | |||
HOME=/root | |||
LOGNAME=root | |||
PATH=/usr/bin:/bin | |||
SHELL=/bin/sh | |||
PWD=/root | |||
PATHはcommand -p getconf PATHを参照していると思われる。 | |||
cronに登録したコマンドが動作しない理由の一つがPATH。注意する。crontab内では変数の代入などは独自拡張になる。基本は実行するスクリプトファイルか、最後のコマンド実行部分で自分で設定する。 | |||
===== anacron ===== | |||
[https://qiita.com/yuzo_____/items/eca271081a0890ce6dcf システムのcrontab (cronとanacronの違い) #Linux - Qiita] | |||
cronの亜種にanacronがある。 | |||
* 遅延実行: サーバーダウンなどでスキップされた処理を、復帰時に実行する。 | |||
* 負荷分散: 最小1日単位のスケジュールしかできない代わりに、自動でサーバーの負荷をみて分散実行してくれる。 | |||
===== guide ===== | |||
[https://qiita.com/onomame/items/71646c5517a39bcd01cc crontabのガイドライン #CentOS - Qiita] | |||
crontabでの実行開始時間は検討が必要。0分と00:00は他のサブシステムの定期タスクの密集時間のことが多いのでここは避けて5分や10分にずらすのが無難。 | |||
=== systemd === | |||
* [https://systemd.io/ System and Service Manager] | |||
* [https://www.freedesktop.org/software/systemd/man/systemd systemd] | |||
GNU/Linux向けのシステム管理ソフトウェア。大量のソフトの統合。サーバーソフトウェアの管理で非常に重要。 | |||
systemdのメインデーモンの/sbin/systemdは/sbin/initにリンクされていて、既存のSysV initを置換する最初のプロセスとなる。 | |||
ssytemd自体は本体の他に4のコンポーネントから構成。 | |||
# utility | |||
# daemon | |||
# target: ユニットのグループ化や処理の順序や依存関係の定義。unitの一種。 | |||
# unit: systemdの管理処理の単位。System V initのサービスに相当。 | |||
systemdはsystemdの管理対象となる処理の単位のユニットでシステムを管理する。ユニットは12のタイプがある。 | |||
# service: デーモンの開始と制御担当。 | |||
# socket | |||
# target | |||
=== | # device | ||
# mount | |||
# automount | |||
# timer | |||
# swap | |||
# path | |||
# slice | |||
# scope | |||
# special | |||
特に重要なのはserviceユニット。 | |||
==== Unit ==== | |||
[https://www.freedesktop.org/software/systemd/man/latest/systemd.unit.html systemd.unit] | |||
ユニットファイルはini形式のテキストファイル。 | |||
===== Unit File Load Path ===== | |||
https://chatgpt.com/c/6753b416-3d48-800b-ae6d-fcb43df956e3 | |||
いくつもの検索パスがある。が、基本的にはいかに配置する。 | |||
* | * system: /etc/systemd/system/ | ||
* | * $XDG_CONFIG_HOME/systemd/user/ ($XDG_CONFIG_HOMEのデフォルトは~/.config) | ||
従って、基本は~/.config/systemd/userに配置すればいい。 | |||
==== systemctl ==== | |||
[https://www.freedesktop.org/software/systemd/man/latest/systemctl.html systemctl] | |||
systemdとservice managerの制御用のコマンド。状態管理からユニットの登録・削除など基本はこのコマンドとサブコマンドで全部対応する。非常に重要。 | |||
<code>systemctl</code> [OPTIONS...] COMMAND [UNIT...] | |||
--userオプションでユーザー扱いしない場合、sudoで管理者権限が必要。 | |||
基本的な流れは以下となる。 | |||
# ユニットファイル (.service) を作成して配置 (/etc/systemd/system or ~/.config/systemd/user)。 | |||
# systemctl enable [unit] で登録。 | |||
# systemctl restart [unit] で起動。 | |||
===== Commands ===== | |||
COMMANDは種類ごとに以下を解釈。大量にある。 | |||
====== Unit Commands (Introspection and Modification) ====== | |||
ユニット自体を制御するコマンド。 | |||
* list-units | |||
* list-automounts | |||
* list-paths | |||
* list-sockets | |||
* list-timers | |||
* is-active | |||
* is-failed | |||
* status | |||
* show | |||
* cat | |||
* help | |||
* list-dependencies | |||
* start | |||
* stop | |||
* reload | |||
* restart | |||
* try-restart | |||
* reload-or-restart | |||
* try-reload-or-restart | |||
* isolate | |||
* kill | |||
* clean | |||
* freeze | |||
* thaw | |||
* set-property | |||
* bind | |||
* mount-image | |||
* service-log-level | |||
* service-log-target | |||
* reset-failed | |||
* whoami | |||
重要なもの。 | |||
* 情報 | |||
** status: ユニットの情報を表示。動作確認。稼働やエラーの確認などができる。問題があったらまずこれで確認。 | |||
** list-units: systemdのメモリー内に存在 (実行中・ロード済み) するユニットを一覧。 | |||
** | |||
* 操作 | |||
** restart: 手動再起動。 | |||
** start: 手動起動。 | |||
** stop: 手動停止。 | |||
* 設定 | |||
** reload: ユニットにユニット固有の設定のリロードを指令する。apache2の場合httpd.conf。 | |||
** daemon-reload: ユニットの設定をリロードする。apacheの場合apache.service。 | |||
==== | ====== Unit File Commands ====== | ||
* list-unit-files | |||
* enable | |||
* disable | |||
* reenable | |||
* preset | |||
* preset-all | |||
* is-enabled | |||
* mask | |||
* unmask | |||
* link | |||
* revert | |||
* add-wants | |||
* edit | |||
* get-default | |||
* set-default | |||
ユニットファイルの操作。 | |||
* list-unit-files: システムにインストール済みの全ユニットファイルを一覧。list-unitsと異なり、読み込んでいないものも表示する。ユニットファイルの存在と有効・無効状態の確認に使う。あまり使わないと思う [https://chatgpt.com/c/6753b416-3d48-800b-ae6d-fcb43df956e3<nowiki>]。</nowiki> | |||
* enable: ユニットを有効にする。設定ファイルの場所からシンボリックリンクを作成する。 | |||
* disable: ユニットを無効にする。シンボリックリンクを削除。 | |||
* Machne Commands | |||
** list-machines | |||
* Job Commands | |||
** list-jobs | |||
** cancel | |||
* Environment Commands | |||
** show-environment | |||
** set-environment | |||
** unset-environment | |||
** import-environment | |||
* Manager State Commands | |||
** daemon-reload | |||
** daemon-reexec | |||
** log-level | |||
** log-target | |||
** service-watchdogs | |||
====== System Commands ====== | |||
* is-system-running | |||
* default | |||
* rescue | |||
* emergency | |||
* halt | |||
* poweroff | |||
* reboot | |||
* kexec | |||
* soft-reboot | |||
* exit | |||
* switch-root | |||
* sleep | |||
* suspend | |||
* hibernate | |||
* hybrid-sleep | |||
* suspend-then-hibernate | |||
特に便利なもの。 | |||
* poweroff: 電源をオフにできる。 | |||
===== Options ===== | |||
オプションも大量にある。 | |||
* -t, --type= | |||
* --state= | |||
* -p, --property= | |||
* -P | |||
* -a, --all | |||
* -r, --recursive | |||
* --reverse | |||
* --after | |||
* --before | |||
* --with-dependencies | |||
* -l, --full | |||
* --value | |||
* --show-types | |||
* --job-mode= | |||
* -T, --show-transaction | |||
* --fail | |||
* --check-inhibitors= | |||
* -i | |||
* --dry-run | |||
* -q, --quiet | |||
* --no-warn | |||
* --no-block | |||
* --wait | |||
* | * --user | ||
* | * --system | ||
* | * --failed | ||
* --no-wall | |||
===== | * --global | ||
* --no-reload | |||
* --no-ask-password | |||
* --kill-whm | |||
* --kill-value= | |||
* -s, --signal= | |||
* --what= | |||
* -f, --force | |||
* --message= | |||
* --now | |||
* --root= | |||
* --image= | |||
* --image-policy= | |||
* --runtime | |||
* | * --preset-mode= | ||
* | * -n, --lines= | ||
* -o, --output= | |||
* --firmware-setup | |||
* --boot-loader-menu= | |||
* --boot-loader-entry= | |||
* -reboot-argument= | |||
* --plain | |||
* --timestep= | |||
* --mkdir | |||
* --marked | |||
* --read-only | |||
* --drop-in= | |||
* --when | |||
* --stdin | |||
* -H, --host= | |||
* -M, --machine= | |||
* -C, --capsule= | |||
* --no-pager | |||
* --legend= | |||
* -h, --help | |||
* --version | |||
特に重要なオプション | |||
* --user: ユーザーとしてservice managerを呼び出す。このオプションを指定することでユーザー権限でsystemdを使える。 | |||
* --system: システムとして実行。デフォルト。 | |||
==== | ==== systemd-system.conf ==== | ||
[https://www.freedesktop.org/software/systemd/man/latest/systemd-system.conf.html systemd-system.conf] | |||
==== | systemdの設定ファイルとその格納場所。 | ||
システムとユーザーとで参照するファイル・場所が異なる。 | |||
* システム: 以下のsystem.confとsystem.conf.d/*.confをこの優先順位で解釈。 | |||
** /etc/systemd | |||
** /run/systemd | |||
** /usr/lib/systemd | |||
* ユーザー: ホームディレクトリー、システムの優先順位でuser.confとuser.conf.d/*.conf。 | |||
** ~/.config/systemd | |||
** システムのディレクトリー (/etc/systemd /run/systemd /usr/lib/systemd) | |||
特に、ユーザーの~/.config/systemdが重要。ユーザーが自由にできる。 | |||
==== user ==== | |||
* https://chatgpt.com/c/6753b416-3d48-800b-ae6d-fcb43df956e3 | |||
* [https://pyopyopyo.hatenablog.com/entry/2021/04/30/233755 ユーザー権限で systemd のサービスを稼働させる方法 - pyopyopyo - Linuxとかプログラミングの覚え書き -] | |||
* [https://zenn.dev/haccht/articles/e6f08dfed26976 CentOS7のsystemdでuserインスタンスを起動する] | |||
* [https://penpen-dev.com/blog/rental-node/ レンタルサーバーでNode.jsアプリを永続化する] | |||
基本はOS管理なのでroot権限で動作する。が、ユーザー別に登録したりもできる。 | |||
そのポイントを整理する。 | |||
# ~/.config/systemd/user/*.serviceにユニットファイルを配置。 | |||
# systemctlコマンドには常に--userオプションを指定する。 | |||
# systemctl --user enable [service] | |||
# systemctl --user restart [service] | |||
なお、ユーザーユニットは、ユーザーがログイン中のみ有効。ログアウト中も稼働させるには、lingerでの登録が必要。 | |||
このlingerでの登録が対応していないことが共用サーバーには多い。 | |||
その場合はしかたないので、cronで終了していたら再起動するコマンドを登録する。 | |||
pgrep -f "node index.js" > /dev/null || (cd index.jsがあるパス && node index.js) | |||
== Other == | |||
=== General === | |||
==== Username ==== | |||
[https://senooken.jp/post/2021/05/06/5343/ パソコンのユーザー名の形式は [A-Za-z0-9._-] で最低8文字まで可能 – senooken JP] | |||
* 使用可能文字: <code>[A-Za-z0-9._-]</code> の正規表現 (ただし,先頭は<code>-</code>以外)。 | |||
* 文字数: 最低8文字まで可能。9文字以上は実装依存。 | |||
=== 辞書 === | |||
IMEの辞書登録の駆使で作業効率が大幅に変わる。 | |||
頻出単語を入力しておくと良い。 | |||
* 個人情報 | |||
** 住所 | |||
** 氏名 | |||
** 電話番号 | |||
** メールアドレス | |||
*人名 | |||
**同僚などよく連絡する人の苗字は登録しておくと楽かも。 | |||
* 挨拶 | |||
** ありがとうございました。 | |||
** よろしくお願いします。 | |||
** ご確認お願いします。 | |||
* 数字 | |||
** 上付き | |||
** 下付き | |||
** 丸付き | |||
{| class="wikitable" | |||
|'''じゅうしょ''' | |||
| | |||
|- | |||
|'''しめい''' | |||
| | |||
|- | |||
|'''でんわ''' | |||
|333-4444-4444 | |||
|- | |||
|'''でんわ''' | |||
|111111111111 | |||
|- | |||
|'''めあど''' | |||
| | |||
|- | |||
|'''めーる''' | |||
| | |||
|} | |||
{| class="wikitable" | |||
|'''あり''' | |||
|'''ありがとうございました。''' | |||
|'''普通名詞''' | |||
|- | |||
|あり | |||
|ありがとうございます。 | |||
|普通名詞 | |||
|- | |||
|おね | |||
|お願いします。 | |||
|普通名詞 | |||
|- | |||
|ごか | |||
|ご確認お願いします。 | |||
|普通名詞 | |||
|- | |||
|ごた | |||
|ご対応ありがとうございました。 | |||
|普通名詞 | |||
|- | |||
|ごた | |||
|ご対応ありがとうございます。 | |||
|普通名詞 | |||
|- | |||
|よろ | |||
|よろしくお願いします。 | |||
|普通名詞 | |||
|} | |||
=== | === RDP === | ||
==== | ==== VNCとの違い ==== | ||
<nowiki>*</nowiki> <nowiki>https://www.routerhosting.com/rdp-vs-vnc-remote-desktop-comparison/</nowiki> | |||
* | <nowiki>*</nowiki> <nowiki>https://superuser.com/questions/32495/whats-the-difference-between-rdp-vs-vnc</nowiki> | ||
<nowiki>*</nowiki> <nowiki>https://ja.wikipedia.org/wiki/%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%E3%83%87%E3%82%B9%E3%82%AF%E3%83%88%E3%83%83%E3%83%97</nowiki> | |||
<nowiki>*</nowiki> <nowiki>https://ja.wikipedia.org/wiki/Virtual_Network_Computing</nowiki> | |||
<nowiki>*</nowiki> <nowiki>https://ja.wikipedia.org/wiki/Remote_Desktop_Protocol</nowiki> | |||
RDPは意味を送受信している、VNCは画像を送受信している。扱うデータ量・負荷が違う。 | |||
教育だとか、サポートなどではVNCが有利。普段の使用ではRDPのほうが有利。 | |||
==== リモートデスクトップ ==== | |||
<nowiki>https://www.tmp1024.com/articles/solve-black-screen-when-ubuntu-remote-desktop</nowiki> | |||
Ubuntu 19.10でのWindows 10からのリモートデスクトップの手順を整理する。 | |||
まずxrdp (0.9.9-1) をインストールする。 | |||
sudo apt install xrdp | |||
その後、Ubuntuはサインアウト・ログアウトする。 | |||
Windows 10のリモートデスクトップ (mstsc.exe) を実行して、Ubuntuのホスト名やIPアドレスで接続する。 | |||
RDPでのログインユーザーが既にログイン済みだと画面が真っ黒になるらしい。 | |||
[リモートデスクトップでアクセスしたら真っ黒の画面が表示される問題の解決 \| 人と情報](<nowiki>https://www.tmp1024.com/articles/solve-black-screen-when-ubuntu-remote-desktop</nowiki>) | |||
そのほか、ログイン時に認証ダイアログが毎回表示される。これはどうにかしたい。 | |||
それ以外は良好。 | |||
=== Clipboard === | |||
==== Windows ==== | |||
Windows 10からWin-vでクリップボードマネージャーが起動する。 | |||
==== Hotkey ==== | |||
[https://nishikiout.net/entry/2023/01/30/221157 【Maccy】MacでもWin+Vが使いたいんじゃぁ!! ~ Macでクリップボード履歴を使えるようにしてくれるユーティリティ - Nishiki-Hub] | |||
MacとWindowsでクリップボードマネージャーのホットキーを共通化。 | |||
C-Cがいいと思う。CopyやClipboardのCだから。いや、C-C/C-M-CはMacの開発者ツールのショートカットキーだからだめ。 | |||
M-Cがいいと思う。 | |||
=== | ==== CopyQ ==== | ||
==== | ===== Hotkey ===== | ||
[https://github.com/hluk/CopyQ/issues/508 Keyboard shortcut to access copyq? · Issue #508 · hluk/CopyQ] | |||
[https://github.com/hluk/CopyQ/wiki/FAQ#how-to-open-application-window-or-tray-menu-using-shortcut FAQ · hluk/CopyQ Wiki] | |||
* [ | * [File]-[Commands](F6) | ||
* [ | * [Add]-[Show/hide main window]-[OK] | ||
* [Global Shortcut] の隣のキーを選びショートカットキーを登録-[OK] | |||
===== | ===== Notes/Tag ===== | ||
クリップボードの内容に説明をつけることができる。Note/Tagの2種類がある。 | |||
単にタイトルをつけるだけなら、NotesでOK。Tagは分類用。 | |||
[右クリック]-[Edit Notes] でNotesを追加・編集できる。 | |||
=== Keybind === | |||
==== App Menu ==== | |||
いわゆる右クリックのコンテキストメニュー。これをショートカットキーで実現する方法一応ある。 | |||
Macの場合。「[https://support.apple.com/ja-jp/guide/mac-help/mh35853/mac Macの右クリック - Apple サポート (日本)]」にあるように、Control-左クリックか、2本指クリック。 | |||
* [https://superuser.com/questions/662175/context-menu-right-click-keyboard-shortcut-in-mac-os-x macos - Context Menu (Right Click) keyboard shortcut in Mac OS X - Super User] | |||
* [https://iboysoft.com/jp/wiki/context-menu-mac.html Access & Customize Context Menu (Right-click Menu) on Mac] | |||
上記にあるように、F12でもできるらしい。ただし事前設定が必要。 | |||
[System]-[Accessibility]-[Pointer Control]-[Alternate pointer actions]=[on] にする。これでF12で開ける。右側のオプションボタンで変更もできる。 | |||
==== Key code ==== | |||
==== | ===== Mac ===== | ||
[https:// | Ref: [https://stackoverflow.com/questions/3202629/where-can-i-find-a-list-of-mac-virtual-key-codes macos - Where can I find a list of Mac virtual key codes? - Stack Overflow]. | ||
===== リポジトリー ===== | 以下のコマンドで一覧を確認できる (Mac v14.2.1、MacBook Air (M1, 2020)、 JIS配列)。 | ||
grep 'kVK_.*=' /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/Headers/Events.h | |||
* [https://manpages.debian.org/buster/apt/sources.list.5.en.html sources.list(5) — apt — Debian buster — Debian Manpages] | 一覧。 | ||
* [https://manpages.debian.org/buster/software-properties-common/add-apt-repository.1.en.html add-apt-repository(1) — software-properties-common — Debian buster — Debian Manpages] | kVK_ANSI_A = 0x00, | ||
* [https://manpages.debian.org/buster/apt/apt.8.en.html apt(8) — apt — Debian buster — Debian Manpages] | kVK_ANSI_S = 0x01, | ||
kVK_ANSI_D = 0x02, | |||
aptの参照元のリポジトリーのリスト。以下の2か所。 | kVK_ANSI_F = 0x03, | ||
kVK_ANSI_H = 0x04, | |||
* /etc/apt/sources.list | kVK_ANSI_G = 0x05, | ||
* /etc/apt/sources.list.d/ | kVK_ANSI_Z = 0x06, | ||
kVK_ANSI_X = 0x07, | |||
直接テキストエディターで編集も可能だが、操作用の専用コマンドadd-apt-repositoryがある。 | kVK_ANSI_C = 0x08, | ||
sudo add-apt-repository 'deb <nowiki>http://myserver/path/to/repo</nowiki> stable myrepo' | kVK_ANSI_V = 0x09, | ||
sudo add-apt-repository -r ppa:user/repository | kVK_ANSI_B = 0x0B, | ||
-r --removeで該当リポジトリーを削除。ただ、既存のリポジトリーの確認が必要なので、自動化用。 | kVK_ANSI_Q = 0x0C, | ||
kVK_ANSI_W = 0x0D, | |||
他に、apt edit-sorucesコマンドがある。これを使うと、nano/viなどの選ばれたテキストエディターで構文チェックしながらsources.listを編集。引数を指定したら、sources.list.d以下を編集。visudoのapt版。 | kVK_ANSI_E = 0x0E, | ||
kVK_ANSI_R = 0x0F, | |||
編集時はapt edit-sourcesを使うとよさそう。 | kVK_ANSI_Y = 0x10, | ||
kVK_ANSI_T = 0x11, | |||
edit-sourcesで選択したテキストエディターはsudo select-editorか~/.selected_editrで編集可能 ([https://manpages.debian.org/buster/sensible-utils/select-editor.1.en.html select-editor(1) — sensible-utils — Debian buster — Debian Manpages])。 | kVK_ANSI_1 = 0x12, | ||
kVK_ANSI_2 = 0x13, | |||
====== sources.list ====== | kVK_ANSI_3 = 0x14, | ||
/etc/apt/sources.list.dディレクトリーには追加のリストを配置する。拡張子は.listか.sourcesで、それぞれの拡張子ごとに、ファイル形式が異なる。 | kVK_ANSI_4 = 0x15, | ||
kVK_ANSI_6 = 0x16, | |||
.list one-line-style format | kVK_ANSI_5 = 0x17, | ||
kVK_ANSI_Equal = 0x18, | |||
.listの拡張子には、昔ながらの1行形式を指定する。 | kVK_ANSI_9 = 0x19, | ||
deb [ option1=value1 option2=value2 ] uri suite [component1] [component2] [...] | kVK_ANSI_7 = 0x1A, | ||
deb-src [ option1=value1 option2=value2 ] uri suite [component1] [component2] [...] | kVK_ANSI_Minus = 0x1B, | ||
.sources deb822-style format | kVK_ANSI_8 = 0x1C, | ||
kVK_ANSI_0 = 0x1D, | |||
.sourcesの拡張子には、Debianのメタデータファイルで使われる構文を使う。 | kVK_ANSI_RightBracket = 0x1E, | ||
Types: deb deb-src | kVK_ANSI_O = 0x1F, | ||
URIs: uri | kVK_ANSI_U = 0x20, | ||
Suites: suite | kVK_ANSI_LeftBracket = 0x21, | ||
Components: [component1] [component2] [...] | kVK_ANSI_I = 0x22, | ||
option1: value1 | kVK_ANSI_P = 0x23, | ||
option2: value2 | kVK_ANSI_L = 0x25, | ||
kVK_ANSI_J = 0x26, | |||
* deb: debian archive, distribution/componentを参照。 | kVK_ANSI_Quote = 0x27, | ||
* deb-src: ソースコードを参照。 | kVK_ANSI_K = 0x28, | ||
* uri: 配布元を指定。 | kVK_ANSI_Semicolon = 0x29, | ||
* suite: stable, testing, codename (buster/bullseyeなど)。uriのサブディレクトリー正確なパス (終端/)。そうでなければ、componentを指定。 | kVK_ANSI_Backslash = 0x2A, | ||
* component: main, contrib, non-free, non-free-firmware | kVK_ANSI_Comma = 0x2B, | ||
kVK_ANSI_Slash = 0x2C, | |||
ただ、Ubuntuの場合、独自拡張が入っていて、suiteとcomponentは以下も追加。 | kVK_ANSI_N = 0x2D, | ||
kVK_ANSI_M = 0x2E, | |||
* suite: | kVK_ANSI_Period = 0x2F, | ||
** <name>-updates: 主なバグ修正更新。 | kVK_ANSI_Grave = 0x32, | ||
** <name>-backports: テストされていないが便利な機能。 | kVK_ANSI_KeypadDecimal = 0x41, | ||
* components: | kVK_ANSI_KeypadMultiply = 0x43, | ||
** restricted: 不自由ソフト。 | kVK_ANSI_KeypadPlus = 0x45, | ||
** universe: コミュニティー保守パッケージ。 | kVK_ANSI_KeypadClear = 0x47, | ||
** multiverse: コミュニティ保守不自由ソフト。 | kVK_ANSI_KeypadDivide = 0x4B, | ||
kVK_ANSI_KeypadEnter = 0x4C, | |||
suiteとcomponentsを整理する。 | kVK_ANSI_KeypadMinus = 0x4E, | ||
kVK_ANSI_KeypadEquals = 0x51, | |||
* suite: | kVK_ANSI_Keypad0 = 0x52, | ||
** <name>: コードネーム。メインパッケージ。 | kVK_ANSI_Keypad1 = 0x53, | ||
** <name>- | kVK_ANSI_Keypad2 = 0x54, | ||
** <name>- | kVK_ANSI_Keypad3 = 0x55, | ||
** <name>- | kVK_ANSI_Keypad4 = 0x56, | ||
* component: main, contrib, non-free, non-free-firmware | kVK_ANSI_Keypad5 = 0x57, | ||
** restricted: 不自由ソフト。 | kVK_ANSI_Keypad6 = 0x58, | ||
kVK_ANSI_Keypad7 = 0x59, | |||
kVK_ANSI_Keypad8 = 0x5B, | |||
kVK_ANSI_Keypad9 = 0x5C | |||
kVK_Return = 0x24, | |||
kVK_Tab = 0x30, | |||
kVK_Space = 0x31, | |||
kVK_Delete = 0x33, | |||
kVK_Escape = 0x35, | |||
kVK_Command = 0x37, | |||
kVK_Shift = 0x38, | |||
kVK_CapsLock = 0x39, | |||
kVK_Option = 0x3A, | |||
kVK_Control = 0x3B, | |||
kVK_RightCommand = 0x36, | |||
kVK_RightShift = 0x3C, | |||
kVK_RightOption = 0x3D, | |||
kVK_RightControl = 0x3E, | |||
kVK_Function = 0x3F, | |||
kVK_F17 = 0x40, | |||
kVK_VolumeUp = 0x48, | |||
kVK_VolumeDown = 0x49, | |||
kVK_Mute = 0x4A, | |||
kVK_F18 = 0x4F, | |||
kVK_F19 = 0x50, | |||
kVK_F20 = 0x5A, | |||
kVK_F5 = 0x60, | |||
kVK_F6 = 0x61, | |||
kVK_F7 = 0x62, | |||
kVK_F3 = 0x63, | |||
kVK_F8 = 0x64, | |||
kVK_F9 = 0x65, | |||
kVK_F11 = 0x67, | |||
kVK_F13 = 0x69, | |||
kVK_F16 = 0x6A, | |||
kVK_F14 = 0x6B, | |||
kVK_F10 = 0x6D, | |||
kVK_F12 = 0x6F, | |||
kVK_F15 = 0x71, | |||
kVK_Help = 0x72, | |||
kVK_Home = 0x73, | |||
kVK_PageUp = 0x74, | |||
kVK_ForwardDelete = 0x75, | |||
kVK_F4 = 0x76, | |||
kVK_End = 0x77, | |||
kVK_F2 = 0x78, | |||
kVK_PageDown = 0x79, | |||
kVK_F1 = 0x7A, | |||
kVK_LeftArrow = 0x7B, | |||
kVK_RightArrow = 0x7C, | |||
kVK_DownArrow = 0x7D, | |||
kVK_UpArrow = 0x7E | |||
kVK_ISO_Section = 0x0A | |||
kVK_JIS_Yen = 0x5D, | |||
kVK_JIS_Underscore = 0x5E, | |||
kVK_JIS_KeypadComma = 0x5F, | |||
kVK_JIS_Eisu = 0x66, | |||
kVK_JIS_Kana = 0x68 | |||
==== Keyhac ==== | |||
===== About ===== | |||
* Repository: [https://github.com/crftwr/keyhac/tree/master crftwr/keyhac: python based key customization utility] | |||
Mac版はmac_portブランチ。 | |||
===== Mac ===== | |||
Mac版は英語サイト ([https://sites.google.com/site/craftware/keyhac-en craftware - Keyhac]) からじゃないとダウンロードできないので注意する。 | |||
マニュアル: [https://crftwr.github.io/keyhac/mac/doc/ja/ keyhac: User Manual]。 | |||
またWindowsと異なり、exeファイルと同じ場所のconfig.pyを読み込んだりはしてくれない。 | |||
$HOME/Library/Application Support/Keyhac/に配置する必要がある。 | |||
また、そもそもキーコード自体が異なるので、一部は専用に作る必要がある。 | |||
===== Base ===== | |||
config.py内にconfigure(keymap)関数を定義して、この中で設定を記述していく。 | |||
引数のkeymapにはKeymapオブジェクトが渡されるのでこれを操作することで設定する。 | |||
keymap_global = keymap.defineWindowKeymap() | |||
Keymap.defineWindowKeymapでWindowKeymapオブジェクトを返す。このオブジェクトに対してグローバルキーマップを定義していく。 | |||
これが基本。 | |||
基本的に全部文字列。キーコードを指定する部分は数値も可能だが、10進数の文字列にしておいたほうがいい。 | |||
===== Modifier ===== | |||
keymap.defineModifierで、Shift/Ctrlのように同時押しに意味のあるキー (modifier) を追加できる。 | |||
スペースの左右のキーにShift/Ctrl相当の機能をもたせる上で非常に重要。 | |||
# ユーザモディファイアキーの定義 | |||
keymap.defineModifier( 235, "User0" ) | |||
上記の例では235のキーコードにU0のモディファイアキーを設定している。U0はUser0の短縮表記。ただし、Windows専用。短縮表記は使わない方がいい。 | |||
===== Policy ===== | |||
* スペースの左右のキー (Windows=変換/無変換、Mac=英数/かな) をモディファイアキーに追加。 | |||
* LSS/RSSと表記 (Left Side Space/Right Side Space) | |||
* Ctrl/Cmd=CCと表記。 | |||
* SpaceはCtrlのワンショットモディファイア。 | |||
* LSS=Shift、RSS=U0、Space=CC。 | |||
hjklのVimのキー移動を定義したいから、RSSはU0。これは確定。 | |||
U0の操作にShiftを組み合わせたいことがあるからLSS=Shiftがいい。 | |||
キーの違いで、Windows/Macで共有と独立部分がある? | |||
=== Package manager === | |||
==== パッケージ ==== | |||
===== pkgs.org ===== | |||
* [https://senooken.jp/post/2020/10/24/4684/ UNIX系OSのパッケージの検索サイト「pkgs.org」 – senooken JP] | |||
* [https://pkgs.org/ Packages for Linux and Unix - pkgs.org] | |||
===== Debian ===== | |||
[https://www.debian.org/distrib/archive Debian -- ディストリビューションアーカイブ] | |||
* http://deb.debian.org/debian | |||
* http://security.debian.org/debian-security | |||
* http://archive.debian.org/debian/ | |||
===== Ubuntu ===== | |||
* [https://packages.ubuntu.com/ Ubuntu – Ubuntu パッケージ検索] | |||
* [http://archive.ubuntu.com/ Index of /] | |||
* [https://old-releases.ubuntu.com/releases/ Index of /releases] | |||
# See <nowiki>http://help.ubuntu.com/community/UpgradeNotes</nowiki> for how to upgrade to | |||
# newer versions of the distribution. | |||
## Ubuntu distribution repository | |||
## | |||
## The following settings can be adjusted to configure which packages to use from Ubuntu. | |||
## Mirror your choices (except for URIs and Suites) in the security section below to | |||
## ensure timely security updates. | |||
## | |||
## Types: Append deb-src to enable the fetching of source package. | |||
## URIs: A URL to the repository (you may add multiple URLs) | |||
## Suites: The following additional suites can be configured | |||
## <name>-updates - Major bug fix updates produced after the final release of the | |||
## distribution. | |||
## <name>-backports - software from this repository may not have been tested as | |||
## extensively as that contained in the main release, although it includes | |||
## newer versions of some applications which may provide useful features. | |||
## Also, please note that software in backports WILL NOT receive any review | |||
## or updates from the Ubuntu security team. | |||
## Components: Aside from main, the following components can be added to the list | |||
## restricted - Software that may not be under a free license, or protected by patents. | |||
## universe - Community maintained packages. Software in this repository receives maintenance | |||
## from volunteers in the Ubuntu community, or a 10 year security maintenance | |||
## commitment from Canonical when an Ubuntu Pro subscription is attached. | |||
## multiverse - Community maintained of restricted. Software from this repository is | |||
## ENTIRELY UNSUPPORTED by the Ubuntu team, and may not be under a free | |||
## licence. Please satisfy yourself as to your rights to use the software. | |||
## Also, please note that software in multiverse WILL NOT receive any | |||
## review or updates from the Ubuntu security team. | |||
## | |||
## See the sources.list(5) manual page for further settings. | |||
Types: deb | |||
URIs: <nowiki>http://archive.ubuntu.com/ubuntu/</nowiki> | |||
Suites: noble noble-updates noble-backports | |||
Components: main universe restricted multiverse | |||
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg | |||
## Ubuntu security updates. Aside from URIs and Suites, | |||
## this should mirror your choices in the previous section. | |||
Types: deb | |||
URIs: <nowiki>http://security.ubuntu.com/ubuntu/</nowiki> | |||
Suites: noble-security | |||
Components: main universe restricted multiverse | |||
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg | |||
以下のURIがある模様。 | |||
* http://archive.ubuntu.com/ubuntu/: メイン。保守対応バージョン。 | |||
* http://security.ubuntu.com/ubuntu/: 保安関係。 | |||
* http://old-releases.ubuntu.com/ubuntu: 過去アーカイブ。 | |||
過去アーカイブを参照するようにする。 | |||
==== APT ==== | |||
[https://senooken.jp/post/2020/05/15/4051/ Debian系パッケージマネージャーAPTの使用方法 – senooken JP] | |||
{| class="wikitable" | |||
|+コマンド一覧 | |||
!目的 | |||
!コマンド | |||
|- | |||
|情報 | |||
|<code>apt show <package></code> | |||
|- | |||
|利用可能バージョンの確認 | |||
|<code>apt show -a <package></code><code>apt list --all-versions <package></code> | |||
|- | |||
|検索 | |||
|<code>apt search <regex></code> | |||
|- | |||
|インストール | |||
|<code>sudo apt install <package></code><code>sudo apt reinstall <package></code><code>sudo apt builde-dep <package></code> | |||
|- | |||
|更新 | |||
|<code>sudo apt update</code><code>sudo apt upgrade</code><code>sudo apt full-upgrade</code><code>sudo apt install <package></code> | |||
|- | |||
|削除 | |||
|<code>sudo apt remove <package></code><code>sudo apt purge <package></code><code>sudo apt autoremove</code><code>sudo apt clean</code><code>sudo apt autoclean</code> | |||
|- | |||
|インストール済みパッケージの確認 | |||
|<code>apt list --installed</code><code><nowiki>dpkg -l | grep '^.i'</nowiki></code><code>apt-mark showmanual</code><code>apt-mark showauto</code> | |||
|- | |||
|パッケージ中身の一覧 | |||
|<code>dpkg -L <package></code> | |||
|- | |||
|ファイルの該当パッケージの確認 | |||
|<code>dpkg -S <file></code> | |||
|- | |||
|依存関係の確認 | |||
|<code><nowiki>apt show <package> | grep Depends</nowiki></code><code>apt depends <package></code><code>apt rdepends <package></code> | |||
|- | |||
|パッケージの自動・手動フラグの指定 | |||
|<code>apt-mark auto <package></code><code>apt-mark manual <package></code> | |||
|- | |||
|パッケージのhold | |||
|<code>apt-mark hold <package></code><code>apt-mark unhold <package></code><code>apt-mark showhold</code> | |||
|- | |||
|リポジトリーの追加・削除・編集 | |||
|<code>sudo add-apt-repository <repository></code><code>sudo add-apt-repository -r <repository></code><code>sudo apt edit-sources</code> | |||
|- | |||
|パッケージの操作履歴の確認 | |||
|<code>cat /var/log/apt/history.log</code> | |||
|} | |||
===== リポジトリー ===== | |||
* [https://manpages.debian.org/buster/apt/sources.list.5.en.html sources.list(5) — apt — Debian buster — Debian Manpages] | |||
* [https://manpages.debian.org/buster/software-properties-common/add-apt-repository.1.en.html add-apt-repository(1) — software-properties-common — Debian buster — Debian Manpages] | |||
* [https://manpages.debian.org/buster/apt/apt.8.en.html apt(8) — apt — Debian buster — Debian Manpages] | |||
aptの参照元のリポジトリーのリスト。以下の2か所。 | |||
* /etc/apt/sources.list | |||
* /etc/apt/sources.list.d/ | |||
直接テキストエディターで編集も可能だが、操作用の専用コマンドadd-apt-repositoryがある。 | |||
sudo add-apt-repository 'deb <nowiki>http://myserver/path/to/repo</nowiki> stable myrepo' | |||
sudo add-apt-repository -r ppa:user/repository | |||
-r --removeで該当リポジトリーを削除。ただ、既存のリポジトリーの確認が必要なので、自動化用。 | |||
他に、apt edit-sorucesコマンドがある。これを使うと、nano/viなどの選ばれたテキストエディターで構文チェックしながらsources.listを編集。引数を指定したら、sources.list.d以下を編集。visudoのapt版。 | |||
編集時はapt edit-sourcesを使うとよさそう。 | |||
edit-sourcesで選択したテキストエディターはsudo select-editorか~/.selected_editrで編集可能 ([https://manpages.debian.org/buster/sensible-utils/select-editor.1.en.html select-editor(1) — sensible-utils — Debian buster — Debian Manpages])。 | |||
====== sources.list ====== | |||
/etc/apt/sources.list.dディレクトリーには追加のリストを配置する。拡張子は.listか.sourcesで、それぞれの拡張子ごとに、ファイル形式が異なる。 | |||
.list one-line-style format | |||
.listの拡張子には、昔ながらの1行形式を指定する。 | |||
deb [ option1=value1 option2=value2 ] uri suite [component1] [component2] [...] | |||
deb-src [ option1=value1 option2=value2 ] uri suite [component1] [component2] [...] | |||
.sources deb822-style format | |||
.sourcesの拡張子には、Debianのメタデータファイルで使われる構文を使う。 | |||
Types: deb deb-src | |||
URIs: uri | |||
Suites: suite | |||
Components: [component1] [component2] [...] | |||
option1: value1 | |||
option2: value2 | |||
* deb: debian archive, distribution/componentを参照。 | |||
* deb-src: ソースコードを参照。 | |||
* uri: 配布元を指定。 | |||
* suite: stable, testing, codename (buster/bullseyeなど)。uriのサブディレクトリー正確なパス (終端/)。そうでなければ、componentを指定。 | |||
* component: main, contrib, non-free, non-free-firmware | |||
ただ、Ubuntuの場合、独自拡張が入っていて、suiteとcomponentは以下も追加。 | |||
* suite: | |||
** <name>-updates: 主なバグ修正更新。 | |||
** <name>-backports: テストされていないが便利な機能。 | |||
* components: | |||
** restricted: 不自由ソフト。 | |||
** universe: コミュニティー保守パッケージ。 | |||
** multiverse: コミュニティ保守不自由ソフト。 | |||
suiteとcomponentsを整理する。 | |||
* suite: | |||
** <name>: コードネーム。メインパッケージ。 | |||
** <name>-security: たぶん保安関係。文書に記載なし。 | |||
** <name>-updates: 主なバグ修正更新。 | |||
** <name>-backports: テストされていない最新更新。 | |||
* component: main, contrib, non-free, non-free-firmware | |||
** restricted: 不自由ソフト。 | |||
** universe: コミュニティー保守パッケージ。 | ** universe: コミュニティー保守パッケージ。 | ||
** multiverse: コミュニティ保守不自由ソフト。 | ** multiverse: コミュニティ保守不自由ソフト。 | ||
例 | 例 | ||
deb [signed-by=/usr/share/keyrings/debian-archive-keyring.gpg] <nowiki>http://deb.debian.org/debian</nowiki> trixie main contrib non-free non-free-firmware | deb [signed-by=/usr/share/keyrings/debian-archive-keyring.gpg] <nowiki>http://deb.debian.org/debian</nowiki> trixie main contrib non-free non-free-firmware | ||
deb [signed-by=/usr/share/keyrings/debian-archive-keyring.gpg] <nowiki>http://deb.debian.org/debian</nowiki> trixie-updates main contrib non-free non-free-firmware | deb [signed-by=/usr/share/keyrings/debian-archive-keyring.gpg] <nowiki>http://deb.debian.org/debian</nowiki> trixie-updates main contrib non-free non-free-firmware | ||
deb [signed-by=/usr/share/keyrings/debian-archive-keyring.gpg] <nowiki>http://deb.debian.org/debian-security</nowiki> trixie-security main contrib non-free non-free-firmware | deb [signed-by=/usr/share/keyrings/debian-archive-keyring.gpg] <nowiki>http://deb.debian.org/debian-security</nowiki> trixie-security main contrib non-free non-free-firmware | ||
Types: deb | Types: deb | ||
URIs: <nowiki>http://deb.debian.org/debian</nowiki> | URIs: <nowiki>http://deb.debian.org/debian</nowiki> | ||
Suites: trixie trixie-updates | Suites: trixie trixie-updates | ||
Components: main contrib non-free non-free-firmware | Components: main contrib non-free non-free-firmware | ||
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg | Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg | ||
Types: deb | Types: deb | ||
URIs: <nowiki>http://deb.debian.org/debian-security</nowiki> | URIs: <nowiki>http://deb.debian.org/debian-security</nowiki> | ||
Suites: trixie-security | Suites: trixie-security | ||
Components: main contrib non-free non-free-firmware | Components: main contrib non-free non-free-firmware | ||
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg | Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg | ||
====== add-apt-repository ====== | ====== add-apt-repository ====== | ||
[https://manpages.debian.org/buster/software-properties-common/add-apt-repository.1.en.html add-apt-repository(1) — software-properties-common — Debian buster — Debian Manpages] | [https://manpages.debian.org/buster/software-properties-common/add-apt-repository.1.en.html add-apt-repository(1) — software-properties-common — Debian buster — Debian Manpages] | ||
add-apt-repository [OPTIONS] REPOSITORY | add-apt-repository [OPTIONS] REPOSITORY | ||
3種類の記法が許容されている。 | 3種類の記法が許容されている。 | ||
# sources.listのdeb行 | # sources.listのdeb行 | ||
# ppa:<user>/<ppa-name> | # ppa:<user>/<ppa-name> | ||
# distoribution component指定 | # distoribution component指定 | ||
https://grok.com/share/c2hhcmQtMw%3D%3D_16ab69f8-fae4-46b8-9f20-81a98ec20376 | |||
CODENAME=$(lsb_release -sc) | |||
sudo add-apt-repository "deb <nowiki>http://old-releases.ubuntu.com/ubuntu</nowiki> $CODENAME main universe multiverse" -y && \ | |||
sudo add-apt-repository "deb <nowiki>http://old-releases.ubuntu.com/ubuntu</nowiki> $CODENAME-updates main universe multiverse" -y && \ | |||
sudo add-apt-repository "deb <nowiki>http://old-releases.ubuntu.com/ubuntu</nowiki> $CODENAME-security main universe multiverse" -y | |||
Ubuntuなら上記で古いパッケージも取れる。 | |||
dockerで使う場合、lsb_releaseやadd-apt-repositoryはコマンドがそもそもないので、使わない方法での対応が必要。 | |||
# RUN sh -c '\ | |||
# CODENAME=$(sed -n "/^VERSION_CODENAME/s/^.*=//p" /etc/os-release) && \ | |||
# echo "deb <nowiki>http://archive.debian.org/debian-security</nowiki> $CODENAME main" >>/etc/apt/sources.list && \ | |||
# echo "deb <nowiki>http://archive.debian.org/debian-security</nowiki> $CODENAME-security main " >>/etc/apt/sources.list && \ | |||
# echo "deb <nowiki>http://archive.debian.org/debian-security</nowiki> $CODENAME-updates main " >>/etc/apt/sources.list' | |||
RUN sed -i 's|<nowiki>http://deb.debian.org/debian|http://archive.debian.org/debian|g'</nowiki> /etc/apt/sources.list && \ | |||
sed -i 's|<nowiki>http://security.debian.org/debian-security|http://archive.debian.org/debian-security|g'</nowiki> /etc/apt/sources.list && \ | |||
====== GPG error ====== | |||
https://grok.com/share/c2hhcmQtMw%3D%3D_4925c047-4ca3-4612-a86a-93085596ac62 | |||
[https://qiita.com/hikaruna/items/1c455bbf122871fce7ae Debian apt update GPG error #Docker - Qiita] | |||
FROM php:7.0.33-apacheなど古めのphp+apcheを使うとDebianも古くてapt updateがうまくいかない。 | |||
0.560 Get:4 <nowiki>http://archive.debian.org/debian</nowiki> stretch Release [118 kB] | |||
0.819 Err:5 <nowiki>http://archive.debian.org/debian</nowiki> stretch-updates Release | |||
0.819 404 Not Found [IP: 10.0.0.28 8080] | |||
0.831 Get:6 <nowiki>http://archive.debian.org/debian</nowiki> stretch Release.gpg [3177 B] | |||
0.898 Ign:6 <nowiki>http://archive.debian.org/debian</nowiki> stretch Release.gpg | |||
0.900 Reading package lists... | |||
0.905 W: GPG error: <nowiki>http://archive.debian.org/debian-security</nowiki> stretch/updates InRelease: The following signatures were invalid: EXPKEYSIG AA8E81B4331F7F50 Debian Security Archive Automatic Signing Key (9/stretch) <ftpmaster@debian.org> The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 112695A0E562B32A | |||
0.905 E: The repository '<nowiki>http://archive.debian.org/debian-security</nowiki> stretch/updates InRelease' is not signed. | |||
0.905 E: The repository '<nowiki>http://archive.debian.org/debian</nowiki> stretch-updates Release' does not have a Release file. | |||
0.905 W: GPG error: <nowiki>http://archive.debian.org/debian</nowiki> stretch Release: The following signatures were invalid: EXPKEYSIG 04EE7237B7D453EC Debian Archive Automatic Signing Key (9/stretch) <ftpmaster@debian.org> EXPKEYSIG EF0F382A1A7B6500 Debian Stable Release Key (9/stretch) <debian-release@lists.debian.org> The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 648ACFD622F3D138 NO_PUBKEY 0E98404D386FA1D9 | |||
0.905 E: The repository '<nowiki>http://archive.debian.org/debian</nowiki> stretch Release' is not signed. | |||
gpg errorがでている。これはまずい。 | |||
[https://qiita.com/hikaruna/items/1c455bbf122871fce7ae Debian apt update GPG error #Docker - Qiita] | |||
FROM php:7.0.33-apache | |||
RUN sed -i 's|deb.debian.org/debian|archive.debian.org/debian|g' /etc/apt/sources.list && \ | |||
sed -i 's|security.debian.org/debian-security|archive.debian.org/debian-security|g' /etc/apt/sources.list | |||
RUN apt-get update \ | |||
; apt-get install -y --allow-unauthenticated debian-archive-keyring | |||
RUN apt update ; apt install -y unzip | |||
こんな感じでリポジトリーを古いものにして、鍵をインストールしたら解決した。意味がよくわからない。 | |||
いや、単にこれでもいけた。 | |||
FROM php:7.0.33-apache | |||
RUN sed -i -e 's|deb.debian.org/|archive.debian.org/|g' \ | |||
-e 's|security.debian.org/|archive.debian.org/|g' /etc/apt/sources.list | |||
RUN apt-get update ; apt-get install -y --allow-unauthenticated unzip | |||
FROM php:7.4.33-apache | |||
RUN apt update ; apt install -y unzip | |||
[[Category:IT]] | [[Category:IT]] | ||
2025年10月30日 (木) 11:21時点における最新版
パソコンのOSごとの記録。
Android
古い端末でのSSLエラー
古いAndroidスマホで2021年9月以降、一部サイトが閲覧不能に - PC Watch
2021年9月以降に、Let's Encryptの方針変更でhttpsのサイトが昔のWebブラウザーだと開けないらしい。
ただし、Firefoxは証明書を独自にしているから問題ない。Firefoxを使えば開ける。
https://chatgpt.com/share/68101902-3ebc-800b-858d-30adbf3789f0
python3 -m http.server
これでHTTPサーバーを立てて、http://ip:8000でHTTP経由でファイル転送できる。
macのIPは以下で確認できる。
ipconfig getifaddr en0
Develop
About
Version
Java
Androidで使用可能なJavaのバージョン一覧 – senooken JP
最初に調査結果のバージョンの対応一覧を以下に掲載する。
| Date | Android version | Android API level | Java version |
|---|---|---|---|
| 2008-09-23 | 1.0-1.1 | 01-02 | 1.4? |
| 2009-04-27 | 1.5-2.2 | 03-08 | 5? |
| 2010-12-06 | 2.3-4.3 | 09-18 | 6? |
| 2013-10-31 | 4.4-6.0 | 19-23 | 7 |
| 2016-08-22 | 7.0- | 24- | 8 |
Android 4.4が安定しているという話を聞くので,だいたいAPIレベル19のJava 7が使用可能と考えてよさそうだ。
Google Play
Google Play アプリの対象 API レベルに関する要件 - Play Console ヘルプ
Google Playでの公開条件がけっこうころころ変わる。
2025-08-31: Android 14 (APIレベル34) 以上を対象にしないと公開されない。
対象APIレベル (targetSdkVersion) を指定する。
minSdkVersionは関係ない模様。
Build
Could not find method jcenter() for arguments [] on repository container of type org.gradle.api.internal.artifacts.dsl.DefaultRepositoryHandler.
Could not find method jcenter() for arguments [] on repository container of type org.gradle.api.internal.artifacts.dsl.DefaultRepositoryHandler.
ビルド時にこういうエラーが出る。
build.gradleの内容。
// Top-level build file where you can add configuration options common to all sub-projects/modules.
apply plugin: "com.github.ben-manes.versions"
apply plugin: 'kotlin'
apply plugin: 'kotlin-android-extensions'
buildscript {
ext.kotlin_version = '1.5.21'
repositories {
mavenCentral()
jcenter()
google()
maven {
url 'https://maven.fabric.io/public'
}
}
dependencies {
classpath 'com.android.tools.build:gradle:7.3.1'
classpath 'com.google.gms:google-services:4.3.14'
classpath "com.github.ben-manes:gradle-versions-plugin:0.25.0"
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.2'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "io.realm:realm-gradle-plugin:10.9.0"// Crashlytics plugin
}
}
allprojects {
repositories {
google()
jcenter()
mavenCentral()
}
gradle.projectsEvaluated {
tasks.withType(JavaCompile) {
options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
}
}
}
repositories {
mavenCentral()
}
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
}
compileKotlin {
kotlinOptions {
jvmTarget = "1.8"
}
}
compileTestKotlin {
kotlinOptions {
jvmTarget = "1.8"
}
}
How to Resolve the 'Could Not Find Method jcenter() for Arguments [' Error in Gradle - CodingTechRoom]
jcenter()をmavenCentral()に置換するか除去すればいい。
Connection timed out: getsockopt. If you are behind an HTTP proxy, please configure the proxy settings either in IDE or Gradle.
Android Studioでプロキシ設定を行う方法【初心者向けガイド】
プロキシー設定の問題の模様。
[File]-[Settings]-[Appearance & Behavior]-[System Settings]-[HTTP Proxy]
- ◎ Manual proxy configuration
- Host name:
- Port number:
他に、gradleの設定も必要。というより、こちらが重要。
gradele.propertiesに以下を追加する。
systemProp.http.proxyHost=proxy.example.com
systemProp.http.proxyPort=8080
systemProp.http.proxyUser=your_username
systemProp.http.proxyPassword=your_password
systemProp.https.proxyHost=proxy.example.com
systemProp.https.proxyPort=8080
systemProp.https.proxyUser=your_username
systemProp.https.proxyPassword=your_password
httpのほうはいらないと思う。
Could not find com.github.ben-manes:gradle-versions-plugin:0.25.0.
buildscript.repositories内の以下の記載を削除。
maven {
url 'https://maven.fabric.io/public'
}
加えて、repositoriesにgradlePluginPortal()を追加。
diff --git a/build.gradle b/build.gradle
index 86baf4a..6f7bdc3 100755
--- a/build.gradle
+++ b/build.gradle
@@ -7,11 +7,8 @@ buildscript {
ext.kotlin_version = '1.5.21'
repositories {
mavenCentral()
- jcenter()
google()
- maven {
- url 'https://maven.fabric.io/public'
- }
+ gradlePluginPortal()
}
dependencies {
Unable to load class 'org.gradle.util.WrapUtil' org.gradle.util.WrapUtil Gradle's dependency cache may be corrupt (this sometimes occurs after a network connection timeout.)
Unable to load class 'org.gradle.util.WrapUtil' org.gradle.util.WrapUtil Gradle's dependency cache may be corrupt (this sometimes occurs after a network connection timeout.) Re-download dependencies and sync project (requires network) The state of a Gradle build process (daemon) may be corrupt. Stopping all Gradle daemons may solve this problem. Stop Gradle build processes (requires restart) Your project may be using a third-party plugin which is not compatible with the other plugins in the project or the version of Gradle requested by the project. In the case of corrupt Gradle processes, you can also try closing the IDE and then killing all Java processes.
ごちゃごちゃやっている間にキャッシュが競合した模様。
File → Invalidate Caches... → Invalidate and Restart をクリックで解消。
Your build is currently configured to use incompatible Java 21.0.8 and Gradle 7.4. Cannot sync the project.
Your build is currently configured to use incompatible Java 21.0.8 and Gradle 7.4. Cannot sync the project. We recommend upgrading to Gradle version 9.0-milestone-1. The minimum compatible Gradle version is 8.5. The maximum compatible Gradle JVM version is 17. Possible solutions: - Upgrade to Gradle 9.0-milestone-1 and re-sync - Upgrade to Gradle 8.5 and re-sync
使用しているjavaとgradleのバージョンがあっていないとこの警告が出る。
gradle 7.4発表直後のjava 18を使う。
Android ビルドの Java バージョン | Android Studio | Android Developers
[Android Studio])> [Settings] > [Build, Execution, Deployment] > [Build Tools] > [Gradle]
[JDKをダウンロードする] を選んで11を選ぶ。インストールにしばらく時間がかかるので、プログレスをみておく。
プロジェクトのJavaのバージョンの固定
https://grok.com/share/c2hhcmQtMw%3D%3D_b63418af-e286-4d16-a192-57a5039e46d2
.idea/gradle.xmlにJavaのバージョン指定がある。これもVCSで管理したらいい。
Could not find io.realm:android-adapters:4.0.0.
FAILURE: Build completed with 7 failures.
1: Task failed with an exception.
-----------
* What went wrong:
Execution failed for task ':app:dataBindingMergeDependencyArtifactsDebug'.
> Could not resolve all files for configuration ':app:debugCompileClasspath'.
> Could not find io.realm:android-adapters:4.0.0.
Required by:
project :app
* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.
==============================================================================
app/build.gradleを以下修正。
// implementation 'io.realm:android-adapters:4.0.0'
superclass access check failed: class butterknife.compiler.ButterKnifeProcessor$RScanner (in unnamed module @0x511f749a) cannot access class com.sun.tools.javac.tree.TreeScanner (in module jdk.compiler) because module jdk.compiler does not export com.sun.tools.javac.tree to unnamed module @0x511f749a
Execution failed for task ':app:compileDebugJavaWithJavac'. > superclass access check failed: class butterknife.compiler.ButterKnifeProcessor$RScanner (in unnamed module @0x511f749a) cannot access class com.sun.tools.javac.tree.TreeScanner (in module jdk.compiler) because module jdk.compiler does not export com.sun.tools.javac.tree to unnamed module @0x511f749a * Try: > Run with --stacktrace option to get the stack trace. > Run with --info or --debug option to get more log output. > Run with --scan to get full insights. * Get more help at https://help.gradle.org Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0. You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins. See https://docs.gradle.org/7.4/userguide/command_line_interface.html#sec:command_line_warnings Ask Gemini
ButterKnifeがjava 17+に未対応。java 11まで対応しているらしい。java 11にする。これで解決した。
SDKバージョン変更
https://grok.com/share/c2hhcmQtMw%3D%3D_d3a9ac04-95f9-484e-a28a-a8e965d73e82
app/build.gradleでsdkのバージョンを指定する。変更したら、Sync Nowを選んで、Gradleに同期が必要。これをしないとビルドに反映されない。
[Run]-[Run app] が無効な時は、インストール可能な状態になっていない。
The application could not be installed. Installation failed due to: 'Error code: 'UNKNOWN', message='Unknown failure: 'cmd: Failure calling service package: Broken pipe (32)''' List of apks: [0] 'app\build\intermediates\apk\debug\app-debug.apk'
https://grok.com/share/c2hhcmQtMw%3D%3D_8aef266a-57f7-4bc9-a729-9c28ce71fb8a
adb kill-server adb start-server
ADBがインストールされているか確認: Android Studioインストール時に自動で入るはずですが、コマンドが「認識されない」場合は、Android SDKのplatform-toolsフォルダをPATHに追加(例: AppData\Local\Android\Sdk\platform-tools)。
一旦上記コマンドでadbサーバーを再起動すると解決するかもしれない。
バージョン番号
アプリのバージョニング | Android Studio | Android Developers
build.gradleのdefaultConfigのversionCode/versionNameで指定する模様。
android {
namespace 'com.example.testapp'
compileSdk 33
defaultConfig {
applicationId "com.example.testapp"
minSdk 24
targetSdk 33
versionCode 1
versionName "1.0"
...
}
...
}
...
versionNameはユーザーに表示用。versionCodeは内部用。
プロジェクトによっては、app/src/main/AndroidManifest.xmlに記載した利する模様。昔やアプリ内の表示用にはこれだったのかも。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:testOnly="false"
android:versionCode="502010"
android:versionName="5.2.1">
```
書式は以下の通り。
- versionName: メジャー番号.マイナー番号.パッチ番号。プラットフォーム変更など大きな変更はメジャー番号、機能更新はマイナー番号、軽微な修正はパッチ番号、をそれぞれ更新。
- versionCode: 502010
- 5: メジャー番号。2桁以上になるなら先頭に追加。
- 02: マイナー番号。2桁。
- 01: パッチ番号。2桁。
- 0: 増分用番号。1桁。google play consoleでアップロードミスなどした時用。
Unsupported class file major version 65
Gradleでビルドすると'Task :resolveMainClassName FAILED'で失敗する #Java - Qiita
FAILURE: Build failed with an exception. * What went wrong: A problem occurred configuring project ':app'. > Could not open cp_proj generic class cache for build file 'C:\Users\20165\project\sfcc-djmob-Android\app\build.gradle' (C:\Users\20165\.gradle\caches\8.0\scripts\ep3ykkf9780jtyl1zxsvmzjzx). > BUG! exception in phase 'semantic analysis' in source unit '_BuildScript_' Unsupported class file major version 65
JVMのバージョンが新しすぎて、対応していないとのkと。
65-44で使用しているjavaのバージョンになる。
古いjavaを使うしかない。
Build Type 'debug' contains custom BuildConfig fields, but the feature is disabled.
「Build Type ‘debug’ contains custom BuildConfig fields」エラーの対策 – 山本隆の開発日誌
A problem occurred configuring project ':app'. > com.android.builder.errors.EvalIssueException: Build Type 'debug' contains custom BuildConfig fields, but the feature is disabled.
Android Gradle Plugin (AGP) 8 以降では、buildConfig機能がデフォルトで無効になっています。
つまり、カスタムBuildConfigフィールドを使用すると、エラーが発生します。
例えば、以下のようにbuild.gradle (Module: app)にbuildConfigFieldを追加している場合、このエラーが発生します。
<android {
buildTypes {
debug {
buildConfigField "String", "API_URL", "\"https://api.example.com\""
}
}
}
このエラーを解決するためには、buildConfig機能を有効にする必要があります。
build.gradle (Module: app)を開き、以下の設定を追加してください。
<android {
buildFeatures {
buildConfig true
}
}
Cause: superclass access check failed: class butterknife.compiler.ButterKnifeProcessor$RScanner
Cause: superclass access check failed: class butterknife.compiler.ButterKnifeProcessor$RScanner (in unnamed module @0x41a82fc4) cannot access class com.sun.tools.javac.tree.TreeScanner (in module jdk.compiler) because module jdk.compiler does not export com.sun.tools.javac.tree to unnamed module @0x41a82fc4
How can I fix this error with ButterKnife in Android Studio? - Stack Overflow
対処方法が2種類。
1 JDK 11を使う。
2 gradle.propertiesに以下を記載。
org.gradle.jvmargs=-Xmx1920M \ --add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED \ --add-exports=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED \ --add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED
2番目の方法がよさそう。
エラー: 定数式が必要です
- [Q&A Android studioでswitch文を使うとエラーが出る - Qiita]
- finalで定数宣言しているはずなのに定数式が必要ですとエラーが出る
- Android Studioでswitchのcase文が使えない問題 – Macな暮らし
エラー: 定数式が必要です
case R.id.btn1:
こんなビルドエラーが、gradleのバージョンを上げると発生するようになった。
gradle 8.0では起きなくて、8.5だと発生する。
resのxmlからjavaに変換する際に、以前はfinalついていたのが、途中でつかなくなったのが原因らしい。
caseではなく、if文で書き直せばOK。
エラー: 要素値は定数式である必要があります
エラー: 要素値は定数式である必要があります
@BindView(R.id.title_view)
caseと同じタイプの気がする。
- ButterKnifeを minne Android から完全に削除しました - Pepabo Tech Portal
- ビュー バインディング | App architecture | Android Developers
ButterKnifeという昔リソースの紐づけに使われていたライブラリー。gradleのバージョンアップでfinalが外れたのが原因。view bindとか本体の機能に統合されているので、このタイミングでそちらに移行したほうがいい。
対応方針。
- app/build.gradleにviewbidingの設定
- idを使っているリソースxmlにlayoutタグを一番外側に追加。
- @bindviewしているところを、bindingを取得してそこからの参照に変更。
// ViewBindingに移行するためのXMLの変更例...
// Before
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/toolbar">
// 省略...
</RelativeLayout>
</ScrollView>
</RelativeLayout>
// After
<layout> ← こちらを追加
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/toolbar">
// 省略...
</RelativeLayout>
</ScrollView>
</RelativeLayout>
</layout>
// ViewBindingに移行するためのXMLの変更例...
// Before
public class ShippingAddressSelectorActivity extends AppCompatActivityActivity {
private final int mMenuGroupId = 0;
@BindView(R.id.toolbar)
Toolbar toolbar;
@BindView(R.id.activity_shipping_address_selector_list)
RecyclerView shippingAddressesView;
@BindView(R.id.activity_shipping_address_selector_cautions_about_ordered)
TextView cautionsTextView;
@BindView(R.id.activity_shipping_address_selector_progress_bar)
View progressBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_shipping_address_selector);
ButterKnife.bind(this);
toolbar.setTitle(R.string.title_select_shipping_address);
mShippingAddressesView.setLayoutManager(new LinearLayoutManager(this));
ShippingAddressAdapter adapter = new ShippingAddressAdapter(this);
shippingAddressesView.setAdapter(adapter);
cautionsTextView.setText(R.string.caution_text);
}
}
// After
public class ShippingAddressSelectorActivity extends AppCompatActivityActivity {
private final int mMenuGroupId = 0;
// Binding クラスの定義
private ActivityShippingAddressSelectorBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this, R.layout.activity_shipping_address_selector);
binding.toolbar.setTitle(R.string.title_select_shipping_address);
setSupportActionBar(binding.toolbar);
if (getSupportActionBar() != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
binding.activityShippingAddressSelectorList.setLayoutManager(new LinearLayoutManager(this));
ShippingAddressAdapter adapter = new ShippingAddressAdapter(this);
binding.activityShippingAddressSelectorList.setAdapter(adapter);
binding.activityShippingAddressSelectorCautionsAboutOrdered.setText(R.string.caution_text);
}
}
$ diff -u a.java b.java
--- a.java 2025-10-29 15:55:01.702784800 +0900
+++ b.java 2025-10-29 15:55:21.477947600 +0900
@@ -1,30 +1,25 @@
public class ShippingAddressSelectorActivity extends AppCompatActivityActivity {
private final int mMenuGroupId = 0;
- @BindView(R.id.toolbar)
- Toolbar toolbar;
-
- @BindView(R.id.activity_shipping_address_selector_list)
- RecyclerView shippingAddressesView;
-
- @BindView(R.id.activity_shipping_address_selector_cautions_about_ordered)
- TextView cautionsTextView;
-
- @BindView(R.id.activity_shipping_address_selector_progress_bar)
- View progressBar;
+ // Binding クラスの定義
+ private ActivityShippingAddressSelectorBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_shipping_address_selector);
- ButterKnife.bind(this);
- toolbar.setTitle(R.string.title_select_shipping_address);
+ binding = DataBindingUtil.setContentView(this, R.layout.activity_shipping_address_selector);
+
+ binding.toolbar.setTitle(R.string.title_select_shipping_address);
+ setSupportActionBar(binding.toolbar);
+ if (getSupportActionBar() != null) {
+ getSupportActionBar().setDisplayHomeAsUpEnabled(true);
+ }
- mShippingAddressesView.setLayoutManager(new LinearLayoutManager(this));
+ binding.activityShippingAddressSelectorList.setLayoutManager(new LinearLayoutManager(this));
ShippingAddressAdapter adapter = new ShippingAddressAdapter(this);
- shippingAddressesView.setAdapter(adapter);
- cautionsTextView.setText(R.string.caution_text);
+ binding.activityShippingAddressSelectorList.setAdapter(adapter);
+ binding.activityShippingAddressSelectorCautionsAboutOrdered.setText(R.string.caution_text);
}
}
やること自体はシンプル。
元ブログのやり方間違っている。
binding = LayoutStageDetailViewBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
bindingはメンバー変数で持っておく必要がある。
onclickとか。
binding.stageAbout.setOnClickListener((View v) -> {
onClickContentsOpenBrowser(URLSetting.URL_STAGE_ABOUT, EventTracker.A_stage_up_lp,
FbAnalyticsTracker.STAGE_UP_LP);
});
これでいい。
https://grok.com/share/c2hhcmQtMw%3D%3D_466b34c5-6d5a-4958-b1b7-b894a451e4cb
Activity以外のVewとかの場合。公式の「フラグメントでビュー バインディングを使用する」を参考にする。
binding = ContainerDpWebviewBinding.inflate(LayoutInflater.from(context), this, true);
これでinflateする。
fragmentの場合。
private ResultProfileBinding binding;
@Override
public View onCreateView (LayoutInflater inflater,
ViewGroup container,
Bundle savedInstanceState) {
binding = ResultProfileBinding.inflate(inflater, container, false);
View view = binding.getRoot();
return view;
}
@Override
public void onDestroyView() {
super.onDestroyView();
binding = null;
}
Duplicate class kotlin.collections.jdk8.CollectionsJDK8Kt found in modules
Execution failed for task ':app:checkDebugDuplicateClasses'. > A failure occurred while executing com.android.build.gradle.internal.tasks.CheckDuplicatesRunnable > Duplicate class kotlin.collections.jdk8.CollectionsJDK8Kt found in modules kotlin-stdlib-1.8.10.jar -> jetified-kotlin-stdlib-1.8.10 (org.jetbrains.kotlin:kotlin-stdlib:1.8.10) and kotlin-stdlib-jdk8-1.6.21.jar -> jetified-kotlin-stdlib-jdk8-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.21)
app/build.gradleに追加して除外すればいいとのこと。
configurations.implementation {
exclude group: 'org.jetbrains.kotlin', module: 'kotlin-stdlib-jdk8'
exclude group: 'org.jetbrains.kotlin', module: 'kotlin-stdlib-jdk7'
}
結局、この方法では解決しなくて、以下の方法で解決した。
java - Duplicate class in Kotlin Android - Stack Overflow
app/build.gradle
dependencies {
constraints {
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.0") {
because("kotlin-stdlib-jdk7 is now a part of kotlin-stdlib")
}
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.0") {
because("kotlin-stdlib-jdk8 is now a part of kotlin-stdlib")
}
}
}
com.android.builder.errors.EvalIssueException: compileSdkVersion is not specified. Please add it to build.gradle
A problem occurred configuring project ':app'. > com.android.builder.errors.EvalIssueException: compileSdkVersion is not specified. Please add it to build.gradle
android - Gradle sync failed: Cause: compileSdkVersion is not specified - Stack Overflow
app/build.gradleのandroid.compileSdkVersionの記載はSDK33以上では廃止予定とのこと。
android {
// compileSdkVersion 33 and above
defaultConfig {
compileSdk 33
}
...
代わりにdefaultConfigに記載するとか。
targetSdkVersionを34から35に更新
- 【Android】targetSdkVersionを34から35に更新する - エムティーアイ エンジニアリングブログ
- Android 15のEdge-to-Edge強制適用でステータスバーのUIが崩れる問題と無効化する方法【解説・設定例付き】 - エムティーアイ エンジニアリングブログ
- Android API 35対応でデザインが崩れた!Edge-to-edge表示の対処法 | hanzochang
- targetSDK35に移行した時に気をつけたこと #Android - Qiita
Android 15でEdge-to-edgeというステータスバー関係の機能がデフォルトで有効になり、レイアウトが崩れる。
無効化が必要。だが、android 15 (sdk 35) の機能が必要で、それのコンパイルは前提。
App resources
About app resources
アプリのリソースの概要 | App architecture | Android Developers
代替リソースの指定
resディレクトリーにvalues-XXみたいな形式で、代替リソースを用意できる。
iOS
Settings
Keyboard
[Settings]-[General]-[Keyboards] が設定項目。
GPS一発切替
iPhoneのショートカットについて質問です。位置情報サービス内の「システム... - Yahoo!知恵袋
iPhoneのGPS設定は深い階層にあって、頻繁に切替必要なのに手間がかかる。
Shortcutsアプリでショートカットを作成して短縮できる。
[Shortcuts]-[All Shortcuts]-[+]-[Open URLs]-[Open]=[prefs:root=Privacy&path=LOCATION/SYSTEM_SERVICES]
これで1タップで開ける。
[iPhoneまたはiPadのウィジェットからショートカットを設定して実行する - Apple サポート (日本)] を参考に、ウィジェットにしてホーム画面に配置するとどこからでも1タップで開ける。
Gboard
スマホの日本語入力 目からウロコの楽々ワザとは? | NIKKEIリスキリング
iOS版のGboardはAndroid版と異なり機能が劣る。標準キーボードを使ったほうがいいらしい。
Space
ASCII.jp:iPhoneで常に半角スペースを入力できるようにする方法
- [ALL KEYBOARDS]-[Smart Punctuation]=On: Off推奨。
- [KANA]-[Smart Fullwidth Space]=On: =Off推奨。
これで常に半角スペース入力になる。
瞬間切替
iPhoneは裏ワザだらけ、英数字と記号を思い通りに入力 スマホ日本語入力再入門(3) - 日本経済新聞
英語キーボードで1文字だけ数字や記号を入力したいことがある。
その場合、[数字切替] キーをドラッグしたまま、入力したいキーで離す。すると、数字や記号を1文字だけ入力して、英字モードに戻る。切替の手間が省けて楽。
Other
iPhoneは裏ワザだらけ、英数字と記号を思い通りに入力 スマホ日本語入力再入門(3) - 日本経済新聞
- [ALL KEYBOARDS]-[Auto-Punctuation/自動大文字入力]=On: Off推奨。英語キーボード切替時に先頭が自動で大文字になる機能。英語圏の人なら便利だが非英語圏なら邪魔。
- [ALL KEYBOARDS]-[Auto-Correction]=On: Off推奨。一般的な綴でない場合、誤入力と判断され、変換のデフォルトが修正候補になる。
- [ENGLISH]-["." Shortcut]=On: On推奨。英語キーボードには.がない。これがオンだと、スペースのダブルタップで.を入力できる。
Network
テザリング
出典:
- iPhoneのテザリングがすぐに途切れてしまいます!? - いまさら聞けないiPhoneのなぜ | マイナビニュース
- iPhoneまたはiPadを使ってMacをインターネットに接続する - Apple サポート (日本)
無通信状態が90秒ほどしばらく続くと省電力設計のため、自動的にオフになる。これが困る。Andriodは自動オフにはならない。
いくつか対策がある。
- [Personal Hotspot] (インターネット共有) 画面の表示を維持。自動ロックも解除しておく。
- USB/Wi-FiではなくBluetooth経由にする。⇢Bluetooth接続はMontary以上で不能。
Bluetooth経由のほうが、範囲が短く、電力消費量も抑えられるので、Bluetoothがよさそう。他にはUSB接続。
Bluetooth接続はできなくなっているので、画面表示か通信しておくしかない。
Instant Hotspot
出典:
- MacからiPhoneの電話回線を利用できる「インターネット共有」のやり方 - iPhoneユーザーのためのMacのトリセツ | マイナビニュース
- Instant Hotspot を使ってパスワードを入力せずにインターネット共有で接続する - Apple サポート (日本)
Bluetoothでのテザリングはできないものの、類似機能のInstant Hotspotで実現できるらしい。
いくつか条件がある。
- iPhone/iPadでインターネット共有 (Personal Hotspot) 対応。
- 全デバイスで同じApple IDでiCloudにログイン。
- 全デバイスでBluetoothオン。
- Wi-Fiオン.
[Personal Hotspot]-[Allow Others to Join] をオンにしなくても自分だけ接続できるのが利点。逆にいうとこれくらい。Bluetoothをオンにしないといけないぶん、余計な通信処理が入る。使わなくていい。
Bluetooth
出典:
MacS v12.1 (Monterey) からiOSでのBluetooth接続が不能になった。
Wi-FiかUSBで接続する。実務的には困らないはず。
Saving
1Blocker
Safari向けの広告ブロッカーアプリ。他に280blockerという有料アプリがある。こちらは日本向け。1Blockerはグローバル。基本無料で追加機能は有料。
通信を節約する方法がいくつかある。
- Wi-Fiを使う場合、Wi-Fiのアクセスポイントごとの設定で [Low Data Mode] がある。これをオンにすると節約できる。
- SIMの場合、[Cellular Data Options]-[Low Data Mode] がある。[Low Data Mode]=onにすると、自動更新や写真の動機などのバックグラウンドタスクが停止される。
- ブラウザーのコンテンツブロッカー。例えば、1Blocker。メディアを無効にするカスタムルールで、大幅に節約できる。
- [Advanced customize]-[custom rule]-[new rule]
- .+/Block all type resource=off/
2 番目に、Safari をコンテンツ ブロッカーと一緒に使用することをお勧めします。私は 1Blocker を使用していますが、メディアを無効にするカスタム ルールを作成して、帯域幅を大幅に節約できます。[高度なカスタマイズ]、[カスタム ルール]、[新規ルール] の順に進み、正規表現に.+(ドットとプラス記号はすべての URL に一致します) を入力し、[すべてのタイプのリソースをブロック] をオフに切り替え、画像、フォント、RAW、SVG、メディア、ポップアップをオンに戻します。保存します。これにより、これらの特定のリソース タイプをすべて読み込む要求がグローバルにブロックされ、帯域幅を大幅に節約できます。
カスタムルールのメディア無効の効果が大きい。
280blockerが日本の広告に一番詳しい。こちらで広告元ドメインのリストを配布しているようで、これを取り込むとほぼ広告をブロックできるらしい。
iPhoneで以下のURLの年月の部分を現在にしてダウンロードする。
https://280blocker.net/files/280blocker_1blocker_202310.1blockpkg
Xユーザーの280blockerさん: 「弊社にて提供中の1blocker用ファイルについてブログに記載いたしました。」 / X
ただ、1blockerが6.xにバージョンアップして、定義ファイルに更新が入って互換性がなくなった模様。
280blockerは元々1blockerの5chのスレッドで280番目にレスしたことが始まりだとか。2021年からトビラシステムズに3億円くらいで買収されたらしい。
AdGuard
- Xユーザーのいちご🍓₣ƦEEÐØMさん: 「ちなみに、iPhone向けの広告ブロックアプリ280blockerは、もともと5chの1blockerスレで280番目にレスしてフィルターを公開してた人が作ったものだが、トビラシステムズに3億7700万円で買収されている。利害関係なのか広告は貫通するようになったのでAdGuardを個人的に使ってる https://t.co/XEsmTosyq6」 / X
- 【iPhone】 AdGuardを使って無料で広告をブロックする | Patreon
こちらの手順に従ってAdGuardを試す。AdGuardアプリ-[Settings]-[Support]-[Watch video tutorial] をやればよさそう。
- AdGuardをインストール。
- [Settings]-[Apps]-[Safari]-[General]-[Extensions]
- AdGuardで始まるスイッチを全部オンにする。
- Safariを開く。
- アドレスバーの左の[aA]など-[Manage Extensions]-AdGuardをオン。
- アドレスバーの左の[aA]など-[AdGuard]-[Always Allow]-[Always Allow on Every Website]
AdGuard DNSで広告除去 #広告ブロック - Qiita
アプリの他にDNSもある。これを設定するとSafari以外も埋込広告以外をブロックできる。
「パブリックAdGuard DNSサーバーに接続する方法 | AdGuard DNS」に手順がある。これのOption2: Configure AdGuard DNS manuallyをやる。
- AdGuardのDNSプロファイルをダウンロード
- [Settings]-[General]-[VPN & Device Management]-[Downloaded profile]-[AdGuard DoH]-[Install] を選ぶ。
これでWebベースの広告はだいたいブロックされて、動作が軽くなるらしい。
Safari
iPhoneの通信量を劇的に節約するコツ10選【ギガ不足を解消】 | デジスタ
Safariの設定が重要。
[Settings]-[Apps]-[Safari]
[Preload Top Hit/トップヒットを事前に読み込む]: これをオフにする。検索時にブックマークから訪問候補を挙げてくれて、さらにバックグラウンドで読み込みも開始する。
Sound
出典: iPhoneの音量を調整する - Apple サポート (日本)。
音量は左サイドボタンで上下できる。左上のスイッチがマナーモードの切替になっている。消音モードと呼んでいる。
複数アカウント
「複数アカウントを使いこなす、iPhoneメールアプリの知られざる便利機能 | 日経クロステック(xTECH)」
iPhoneのメールアプリは標準のMailを使うのがよいだろう。K-9がないから。複数アカウントにも対応しているが、設定が若干特殊。アプリ設定からではなく、iOS本体の設定から行う。
This message is from a sender in your blocked list.
自分宛へのメールが、なぜかブロックリストに登録されていて、iOSのMailアプリで開くと自動でTrashに移動されてしまう。必要なメールもごみ箱に強制的に入ってしまい、困る。
[This message is from a sender in your blocked list.] の警告が表示されている。
「All sent messages marked blocked sender - Apple Community」で同じ議論がある。
上記警告文の [Settings] からMailアプリの設定で [Blocked Sender Options] や [Blocked] にブロックリストがあるので、これを解除するといいらしい。
電話の受信拒否をすると、同じアドレスがこちらに入る模様。
[Blocked Sender Options] を [Move to Trash] から [Leave in Inbox] にするだけでもいいかもしれない。
ただ、特にブロックした覚えのないメールが勝手に登録されていたので、注意が必要。
App
いくつか必要なアプリがあるので整理する。
Switcher
出典: iPhoneで開いているアプリを切り替える - Apple サポート (日本)。
アプリスイッチャーという機能で、現在実行中のアプリを変更可能。Androidはホームの上スワイプ、右ボタンだった。iOSはホームのダブルクリック。
KeePass
パスワード管理アプリ。iOSは別になる。KeePass XCはQtを使っているからビルドできるはずなんだけど。
「iOS 向けの Keepass クライアントの備忘録 | hyt adversaria」を見る限り、KeePassiumが良さそう。
Camera/Video
Camera
出典: iPhoneのカメラ解像度を変更し写真/動画サイズを軽くする便利技 – 格安SIM初心者教室
iPhoneのデフォルトのカメラは解像度が高すぎて写真のファイルサイズがかなり大きい。変更できない。せいぜいインカメラで撮影するくらい。
LINE Cameraが定番のカメラアプリらしい。こちらは解像度を柔軟に設定できる。
[Settings]-[Saving]-[Resolution]-[Medium] に変更。これでデフォルトの半分になる。
「iPhoneのカメラ解像度を変更し写真/動画サイズを軽くする便利技 – 格安SIM初心者教室」はもっと小さい。こちらがいいだろう。
Low Cameraはもっと小さいが、小さすぎて細かい文字が見えなくて困る。調べた。
「2024|無音カメラアプリおすすめランキング11選|無料|高画質 | Good!Apps」が参考になった。
Simple Camがよかった。基本はこの1.2MPか0.3MP。外観だけでいいならLowCameraとか。
| rank | OS | name | url | Free | level | MP | resolution px | size KB | square | 備考 |
| 4 | iOS | LowCamera | Very Low | 0.05 | 144x144 | 25 | x | |||
| 4 | iOS | LowCamera | Low | 0.1 | 360x360 | 50 | x | |||
| 4 | iOS | LowCamera | Medium | 0.2 | 480x480 | 100 | x | 画質が低すぎる。 | ||
| 4 | iOS | LINE Camera | Medium | 2 | 1512x1512 | 1024 | x | 画質をもう少し落としたい。 | ||
| 2 | iOS | 低画質カメラ | - | 動画のみ。 | ||||||
| 3 | iOS | 0.3MPCamera | 480x640 | - | いまいち。正方形がない。 | |||||
| 3 | iOS | 0.3MPCamera | 240x320 | - | いまいち。正方形がない。 | |||||
| 3 | iOS | 0.3MPCamera | 120x160 | - | いまいち。正方形がない。 | |||||
| 3 | iOS | default | Photo | 12 | 3024x4032 | 2300 | x | |||
| 3 | iOS | default | Photo | 9 | 3024x3024 | 2600 | x | |||
| 3 | iOS | Capera | Max | 12 | 3024x4032 | 2300 | - | 正方形がない。 | ||
| 3 | iOS | Capera | FullHD | 1920x1080 | - | |||||
| 3 | iOS | Capera | HD | 1280x720 | - | |||||
| 3 | iOS | Capera | VGA | 640x720 | - | |||||
| 3 | iOS | Capera | CIF | 352x288 | - | |||||
| 3 | iOS | Lo-Fi Cam | https://apps.apple.com/bz/app/lo-fi-cam/id1607751695 | 192x144 | - | 正方形がない。 | ||||
| 3 | iOS | Lo-Fi Cam | https://apps.apple.com/bz/app/lo-fi-cam/id1607751695 | 352x288 | - | 正方形がない。 | ||||
| 3 | iOS | Lo-Fi Cam | https://apps.apple.com/bz/app/lo-fi-cam/id1607751695 | 480x360 | - | 正方形がない。 | ||||
| 3 | iOS | Lo-Fi Cam | https://apps.apple.com/bz/app/lo-fi-cam/id1607751695 | 640x480 | - | 正方形がない。 | ||||
| 3 | iOS | Lo-Fi Cam | https://apps.apple.com/bz/app/lo-fi-cam/id1607751695 | 960x540 | - | 正方形がない。 | ||||
| 3 | iOS | Lo-Fi Cam | https://apps.apple.com/bz/app/lo-fi-cam/id1607751695 | 1280x720 | - | 正方形がない。 | ||||
| 5 | iOS | Simple Cam | 0.3 | 480x480 | 100 | x | 必要な範囲を網羅できている。 | |||
| 5 | iOS | Simple Cam | 1.2 | 960x960 | 200 | x | 必要な範囲を網羅できている。 | |||
| 5 | iOS | Simple Cam | 1.9 | 1200x1200 | 300 | x | 必要な範囲を網羅できている。 | |||
| 5 | iOS | Simple Cam | 5 | 1936x1936 | 800 | x | 必要な範囲を網羅できている。 | |||
| 5 | iOS | Simple Cam | 8 | 2448x2448 | 1500 | x | 必要な範囲を網羅できている。 | |||
| 5 | iOS | Simple Cam | 12 | x | 必要な範囲を網羅できている。 | |||||
| 3 | iOS | MiraCamera | 9 | 3024x3024 | 2700 | x | いまいち。 | |||
| 3 | iOS | Foodie | standard | 3 | 1920x1920 | 1600 | x | いまいち。 | ||
| 3 | iOS | SODA | standard | 3 | 1920x1920 | 1800 | x | いまいち。 | ||
| 2 | iOS | Pro Camera | - | x | ||||||
| 1 | iOS | Q Camera | x | - | ||||||
| 1 | iOS | AutoCam | x | - | ||||||
| 2 | iOS | SkyCamera | 0.8 | 750x1000 | - | |||||
| 2 | iOS | StageCamHD | 1280x720 | x | ||||||
| 2 | iOS | StageCamHD | 1920x1080 | x | ||||||
| 2 | iOS | StageCamHD | 3024x3024 | x | ||||||
| 2 | iOS | StageCamHD | 2592x1936 | x | ||||||
| 2 | iOS | StageCamHD | 3264x2448 | x | ||||||
| 2 | iOS | BeautyPlus | x |
Video
- How To Make Square Videos With An iPhone - YouTube
- iPhoneで正方形の動画を撮る方法 | アレルギーでも猫と暮らす!~ミニマルな暮らしでアレルゲンカット~
- How to Set iPhone Camera Aspect Ratio to Square by Default - YouTube
標準のカメラアプリで正方形の動画の撮影方法。photoで正方形にして、撮影ボタン長押しで正方形で動画撮影可能。右にスライドでモードロックとのこと。
カメラアプリの設定で、 [Preserve Settings]-[Creative Controls] でデフォルト正方形を維持できる。
Record Square Format Videos on iPhone with These Apps
動画撮影アプリのおすすめ人気ランキング【2024年】 | マイベスト
正方形の動画撮影アプリ。
Clips
Apple純正の動画作成ソフト。
Favorite
写真も動画も基本はFILTISTでOK。ただし、ズーム不能なので、ズーム時だけ別アプリを使う。
- LISTIST=動画・写真=720x720ズームなし。
- MONOV=動画720x720ズーム。
- Simple Cam=写真ズーム。
通常はLISTISTで動画も写真も撮影。ズームが必要な場合だけ、MONOV/Simple Cam。
ズーム用を1アプリで対応できればよかったのだが、うまいのがない。LINE Cameraが近かったのだけど、動画が最大30 s。惜しかった。しかたない。
LINE Camera
正方形で写真と動画に対応。サイズも大きすぎない。ズームも対応。ただし、動画は30 sまで。これが惜しい。
QR
Ref: QRコードで開いたWEBサイトの履歴がiPhoneで残らない問題、これで解決 | マイナビニュース.
QRコードを読み取ると、QRコードリーダーアプリ内ブラウザーで開けれて、Safariの履歴に残らない。開いた後に、右下でSafariで開き直すと、タブで開き直せる。基本はすぐ開き直したほうがいい。
いや、標準のQRコードリーダーで開いた後に、Safariで開き直すと、状態が違うのか、吉野家のレシートアンケートなどはエラーになる。サードパーティーアプリを使ったほうがいい。
QRコードアプリおすすめ2選&ランキングTOP10 無料・人気のアプリを編集部が厳選!【2024年】 | iPhone/Androidアプリ - Appliv
QRQRがいい。
Other
エクスプレスカード
エクスプレスカード(Face ID等なしで利用する)|Apple PayのPASMO
[Wallet]-任意のカード-[Card Details]-[Express Transit]
ここがOnだと本体をかざすだけで、アプリを起動することなく決済可能。
1枚しか設定できない。
iPhoneの電池が切れても一定時間は使用可能。
近接センサー
通話中に、耳を話すと、勝手に画面ロックになったり、画面操作中に強制的に真っ黒になってまともに操作できない。
IPhoneの上部中心に近接センサーがあって、これで制御されているらしい。
[Settings]-[Accessibility]-[Touch]-[Prevent Lock to End Call]=trueに変更する。これで電源ボタンを押しても通話は中断しない。
これでましになった気がする。
着信拒否
着信拒否している場合、着信が入らず、ツーツーとなる。模様。転送やアナウンスがない。それがポイント。
Windows
Other
IME
MS IMEでIMEのオン/オフの切り替え快適化 – senooken JP
右下IMEアイコンを右クリック-[設定]-[キーとタッチのカスタマイズ]‐[キーの割り当て]
- [各キー/キーの組み合わせに好みの機能を割り当てます]=オン
- 無変換キー=IME-オフ
- 変換キー=IME-オン
高速スタートアップ
出典:
- Windows シャットダウンしてもバッテリー 減る | cocotiie
- 富士通Q&A - [Windows 11 高速スタートアップを無効にする方法を教えてください。 - FMVサポート : 富士通パソコン]
電源オフにしているのに、バッテリーが何故か減っている。原因は [高速スタートアップ] とのこと。
[コントロールパネル]-[ハードウェアとサウンド]-[電源オプション]-[電源ボタンの動作を選択する]-[現在利用可能ではない設定を変更します]-[シャットダウン設定]-[高速スタートアップを有効にする (推奨)] をオフにする。
勝手にスリープする
システムがすぐにスリープしてしまうのは、「システム無人スリープタイムアウト(System unattended sleep timeout)」機能が働いているためだと考えられる。これは、システムがWOL(Wake On LAN)や何らかのイベントなどで、自発的にスリープから起動した場合、そのまま何も操作せずに放っておくと、一定時間後にまた自動的にスリープ状態に移行するための機能である。
システム無人スリープのタイムアウトを設定する項目を有効化するには、コマンドプロンプトで以下のpowercfgコマンドを実行すればよい。再起動などは必要なく、[電源オプション]にタイムアウトを設定する項目が表示される。
powercfg -attributes SUB_SLEEP 7bc4a2f9-d8fc-4469-b07b-33eb785aaca0 -ATTRIB_HIDE
これだとダメ。
一応元に戻す。
powercfg -attributes SUB_SLEEP 7bc4a2f9-d8fc-4469-b07b-33eb785aaca0 +ATTRIB_HIDE
「Windows10で勝手にスリープになる現象を防ぐための対処法 | TechMemo」
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\238C9FA8-0AAD-41ED-83F4-97BE242C8F20\7bc4a2f9-d8fc-4469-b07b-33eb785aaca0
このレジストリーの値を0から2に変更する。
システム無人スリープタイムアウトが表示されるので0にするとなくなる。らしい。
そのほか、ディスプレイの電源を切るのはやはりだめ。パソコンの省エネ機能が働いて、処理が止まる。
Startup
Microsoft TeamsなどOSの起動時に勝手に自動起動するアプリがある。制御する方法がいくつかある。
[設定]-[アプリ]-[スタートアップ] で制御できる。大半はこれで制御できる。
ほかに、Explorerのshell:startupか%USERPROFILE%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startupにショートカットがあると、それでも自動起動する。
録音
Windows10で録音がしたい!ボイスレコーダーを使用した音声の録音方法を解説
プレインストールのボイスレコーダーで録音できる。
Theme
Ref: デスクトップのテーマを変更する方法<Windows 11>|サポート|dynabook(ダイナブック公式).
OSのテーマでデフォルトのライト・ダークが決まる。
[スタート]-[設定]-[個人用設定]
Hardware
Keyboard
Ref: FMV Q&A - [Windows 11 キーを押し続けたときに、同じ文字が連続して入力される速度を調整する方法を教えてください。 - FMVサポート : 富士通パソコン].
[コントロールパネル]-[キーボード]-[速度]
- 文字の入力
- 表示までの待ち時間 (デフォルト3/4)=4/4
Mouse
[コントロールパネル]-[マウス]
- ポインター オプション
- ポインターの速度を選択する (デフォルト=左から6 (6/11))
- ☑ポインターを自動的に既定のボタンの上に移動する。
- ☑Ctrlキーを押すとポインターの位置を表示する。
コントロール パネル\すべてのコントロール パネル項目\コンピューターの簡単操作センター\マウスを使いやすくします
- マウスポインター
Explorer
表示
[ファイル]-[オプション]-[フォルダーオプション]-[表示]
- ファイルおよびフォルダー
- ☑チェックボックスを使用して項目を選択する。
- ファイルとフォルダーの表示
- ☑隠しファイル、隠しフォルダー、および隠しドライブを表示する。
- □登録されている拡張子は表示しない
WSL
http_proxy
[Linux 用 Windows サブシステム設定]-[ネットワーク]-[オート プロキシが有効]=オンだと、wslやubuntu上でhttp_proxy/HTTP_PROXYの環境変数が自動的に設定される。
混乱するのでオフでいいと思う。
Mac
Application
Applications
Macの実行ファイルは.appファイル。これは/Applicationsに配置されている。Laucnhpadはこのディレクトリー内を表示している模様。
Uninstall
Mac でアプリをアンインストールする - Apple サポート (日本)
いくつか方法がある。
App Storeからインストールしたアプリの場合、Launchpadを開いて該当アプリを表示して、ドラッグすると左上に×ボタンが表示されるので、これをクリックするとアンインストールになる。
AppStore以外の場合、Finderから該当ファイルを削除する。/Applicationsか$HOME/Applicationsを開いて該当アプリ.appを削除する。
System
スリープの無効化
【Macユーザー必見】iMac・MacBookをスリープさせない方法
長時間コマンドの実行などで、パソコンをスリープにしたくないことがある。以下の設定を変更することで対応できる模様。
- [System settings]
- [Lock Screen]: [Start Screen Saver when inactive]=false: これでスリープ無効?
- [Battery]-[Options]: Prevent automatic sleeping on power adapter when the display is off=true これでパソコンの蓋を閉じてもスリープにならない。
これらでもダメなら、素直にYouTube動画をループ再生するとかで、稼働を継続させる。
他に、caffeinate -iコマンドの実行がある。
caffeinate -iを実行すると、C-cで中断するまでずっとスリープを抑止するらしい。
Mouse
マウスポインター速度 macデフォルト4/10。
DiscreteScroll
- Macのマウスホイールの加速度を無効にして Windowsと同じ動きにする方法、macOSのクソな UI動作仕様を修正 (macOSのマウスホイールのスクロールの加速度の動きにはイラついている人が世界中に大勢居ます)
- GitHub - emreyolcu/discrete-scroll: Fix for macOS's unnecessary scroll wheel acceleration
Macのマウスホイールのスクロールは加速度に応じる。高速に動かすと移動量が増える。指が疲れる。
加速度を無視して、Windows同様に一定量の移動にしてくれるのが、DiscreteScroll。
lanchctl
- Macでの環境変数(environment variables)の設定方法 #MacOSX - Qiita
- launchd, launchctlについて(導入編) · GitHub
- Mac の launchctl ってなんだ? - IT戦記
- LaunchDaemons (launchctl, launchd.plist) の使い方 - maruko2 Note.
Macでシステム起動時の処理を管理する仕組み。Mac OS 10.10以上で導入されている。
GUIなど、システムグローバルで環境変数を反映させたい場合、ここに登録する必要がある。
plistファイルを作成して、それをlanchctl loadして登録になる。unloadで解除になる。
- plistのファイルのパスは、主に以下2通り。
/Library/LaunchAgents/*****.plist: システム全体で有効になる。~/Library/LaunchAgents/*****.plist: ログインユーザのみで有効になる。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>setenv.M2_HOME</string>
<key>ProgramArguments</key>
<array>
<string>/bin/launchctl</string>
<string>setenv</string>
<string>M2_HOME</string>
<string>/usr/local/Cellar/maven31/3.1.1/libexec</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>ServiceIPC</key>
<false/>
</dict>
</plist>
上記のような形式。
配置したら、コマンドで即座に反映できる。
launchctl load ~/Library/LaunchAgents/SSLKEYLOGFILE.plist
値を修正した場合、一度unloadしてからloadする。
Finder
拡張子の表示
https://support.apple.com/ja-jp/guide/mac-help/mchlp2304/mac
- MacのFinder で、「Finder」>「設定」と選択してから、「詳細」をクリックします。
- 「すべてのファイル名拡張子を表示」を選択するか選択を解除します。
Screenshot
場所の変更
https://support.apple.com/ja-jp/guide/mac-help/mh26782/mac
起動中の [オプション] で選べる。
保存形式の変更
https://www.pc-koubou.jp/magazine/76550
defaults write com.apple.screencapture type jpg
戻すとき。
defaults write com.apple.screencapture type png
IME
¥と\
Macだと¥キーを入力すると¥が入力される。この文字を使うことはほぼなくて、バックスラッシュを入力したい。option-¥で入力できるが面倒。設定で変更できる。
- [システム設定]-[キーボード]-[入力ソース]-[編集]
- [日本語]
- ☑️英字
- ["¥"キーで入力する文字]=\
- [ABC]-[-]で削除する。
[ABC]の削除がポイント。ただ、これをするとcontrol-3で絵文字が出る問題がある。ABCは戻した方がいいかも。
絵文字を表示
【Mac】Control+3で顔文字リストが表示されるショートカットキーを変更する方法
キーボードの入力ソースが日本語だとこの問題が起こる。
他のショートカットキーの割り当てで無効にできるとの情報があったが、Mac 15.3.1では無効にならず。諦める。
Google日本語入力のアンインストール
【助かった】MacでGoogle日本語入力を完全にアンインストールする方法
- [System settings]-[Keyboard]-[Text input]-[Input Sources]-[Edit] を選ぶ。
- Google日本語入力の項目を選んで[-]を選ぶ。
- Finderで[Application]ディレクトリーを開いて[Google日本語入力]を削除する。
変換Enter 2回
Mac日本語入力、エンター2回でなく1回で変換する方法 | iSchool合同会社
MacのIMEは変換後確定にEnter2回必要。これが面倒。1回にすることができる。
[システム設定]-[キーボード]-[入力ソース]-[編集]-[日本語]-[☑️Windows風のキー操作]
これで1回で済む。
ライブ変換オフ
Macの「ライブ変換」機能をOFFにする方法 – Easytouse
デフォルトでライブ変換で自動変換してくれる。が、これが期待と違うことがあってイライラするのでオフにする。
[システム設定]-[キーボード]-[入力ソース]-[編集]-[日本語]-[▫️ライブ変換]
これでオフにすればOK。
追加辞書
Macの追加辞書に読み込むためのテキストファイルを作成する - Apple サポート (日本)
単語の読み,単語,品詞,(,,メモ)
| 要素 | 説明 | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| 単語の読み | 単語の読みをひらがなで入力します。長さは32文字以下にする必要があります。
単語にASCIIカンマやスペースを含める場合は、単語を引用符(“”)で囲みます。 単語にASCII引用符(")を入力する場合は、単語を1バイトの引用符で囲み、1バイトの引用符の周囲に連続する2つの1バイトの引用符を入力します。 | ||||||||||
| 単語 | 目的の変換結果を入力します。1つの単語の長さは64文字以下にする必要があります。単語には、Unicodeコンソーシアムで定義されている文字と記号であれば、どれでも使用できます。 | ||||||||||
| 品詞 | 次のいずれかの品詞を指定します:
| ||||||||||
| メモ | メモはオプションです。メモの前には2つのASCIIカンマ(,,)を入力します。メモはユーザ辞書には登録されません。
| ||||||||||
これで登録する。登録手順。
- [設定]-[キーボード]-[テキスト入力]-[入力ソース]-[編集]
- [日本語-ローマ字入力]-[追加辞書]
- ここにドラッグ・ドロップするか、右クリック-[辞書をインストール] を選ぶ。
入力ソースの追加辞書の部分がグレーにな… - Apple コミュニティ
登録方法に癖がある。
- 辞書ファイルの拡張子はtxt
- 品詞の指定が重要。基本は普通名詞。
Keybind
https://support.apple.com/ja-jp/102650
| キー | 内容 | ||
|---|---|---|---|
| option-command-電源
option-command-メディア取り出しキー |
スリープ | ||
| C-command-q | ロック | ||
fn
Mac でファンクションキーを使う方法 - Apple サポート (日本)
F1-F12キーはデフォルトではMac専用機能の割り当てになっている。
fnキーとの同時押しでFn自体の機能になる。デフォルトでFnにしたい場合、設定で変更する。
[システム設定]-[キーボード]-[キーボードショートカット]-[ファンクションキー]-[F1、F2などのキーを標準のファンクションキーとして使用]=on
Keychain
Macのキーチェーンアクセスとは?
https://support.apple.com/ja-jp/guide/keychain-access/kyca1083/mac
「macOS」で「キーチェーンアクセス」を使う--パスワードを見つけて変更するには
https://japan.zdnet.com/article/35190535/
dockのkeychainアプリでMacのパスワードマネージャー。KeePassXCと似たようなことができる。OS標準だから安全・安心?
Passwords
Apple、今秋リリース予定のiPhoneとMacに新しいパスワードアプリ搭載
https://news.mynavi.jp/techplus/article/20240613-2964379/
2024年秋に [Passwords] という新しいOSアプリが登場。従来のKeychainをベースに、WiFiパスワードなど一元管理のためのアプリの模様。
こちらを使うのが良さそう。
[システム設定]-[パスワード] からアクセスする模様。
Touch ID
MacでTouch IDを使用する - Apple サポート (日本)
Touch IDを使うことで、指紋認証を利用できる。
[System settings]-[Touch IDとパスワード]-[Touch ID]-[指紋を追加]
Finder
Trashのサイドバー・ブックマーク表示
Macのゴミ箱 (Trash) の扱いが特殊。実態は、~/.Trashにある。ただ、HOMEディレクトリーで、C-<で隠しファイル表示にしてもFinderから表示できない。なので、ドラッグドロップでサイドバーにブックマーク表示もできない。Finderから直接アクセスできないのが使いにくい。
サイドバーに表示する方法があった (How do I get Trash to show in a finder window sidebar? : r/MacOS)。
Trashを開いた後に、[File]-[Add to Sidebar] を選ぶ。これだけ。
フォルダーを先頭表示
【Mac Info】Finderのファイル操作術をさらに極めるカスタマイズ20選 〜Macのキホン Vol.2 - PC Watch
Finderの設定でフォルダー・ディレクトリーを常に先頭にソート表示する設定がある。
[Settings]-[Advanced]-[Keep folders on top] の以下の2項目をオンにする。
- In windows when sorting by name
- On Desktop
検索場所のデフォルトを現在フォルダーに変更
【Mac Info】Finderのファイル操作術をさらに極めるカスタマイズ20選 〜Macのキホン Vol.2 - PC Watch
[Settings]-[Advanced]-[When performing a search]=[Search the Current Folder] にする。
ツールバーアプリ
ツールバーへのアプリ登録
- 【Mac Info】Finderのファイル操作術をさらに極めるカスタマイズ20選 〜Macのキホン Vol.2 - PC Watch
- Mac Finderのツールバーにアプリを登録する方法 - MAXI design Blog
Finderのツールバーにアプリを登録できる。よく使うアプリはここに配置すると時短になる。
appファイルをCommandの同時押しドラッグ・ドロップで配置できる。削除は同じくCommand同時押しのドラッグ・ドロップで画面外。
右クリックメニューのクイックアクションがわりで使える。
右クリックでファイルを新規作成
- https://chatgpt.com/c/6775258d-a874-800b-9472-1f7095f28b95
- Mac > 右クリックでテキストファイル作成 #Mac - Qiita
- Mac OSXで右クリックで新規ファイルを作成
- 【簡単】Macで右クリックからテキストを新規作成する方法 - ITips
- macOSでFinderの右クリックから新規テキストファイルを作成する #Mac - Qiita
デフォルトでこれはできない。
いくつか方法があるが、Automatorにtouchコマンドを登録するのが一番簡単そう。
[Launchpad]-[Automator]-[Quick Action]-[Choose]
Workflow receives current=files or folders
[Library]-[Run Shell Script]
touch "$1/f.txt"
[File]-[Save]
Save quick action as: New file
[Save]
この方法はいまいち。ファイルかディレクトリーを右クリック必要。
- OS Xで右クリックからテキストファイルを新規作成するには?|Mac - 週刊アスキー
- 【Mac】Finderの右クリックで任意のファイル(txt,xlsx,docx,pptx等)を作成する方法 - 自由気ままに書いちゃおう
うまい方法を発見。「Finder ファイル作成 - Apple コミュニティ」にあるように、スクリプトエディターでAppleScriptをアプリケーション形式 (.app) で保存して、Command推しながらドロップでFinderのツールバーにランチャーを登録できる。右クリックではないが、やりたいことを簡単に実現できる。これがいい。
上記のAppleScriptは構文エラーで動作しなかったので、「AppleScript|Finderで右クリックから新規ファイルを作成する - mogmo .NET」を参考に修正した。
1 以下の内容のNewFile.scptを作成する。
tell application "Finder" set theFile to (insertion location as text) & "Untitled.txt" set touchScript to "touch " & quoted form of (POSIX path of theFile) do shell script touchScript end tell
2 [Launchpad]-[Script Editor] を起動してNewFile.scptを開く。
3 [File]-[Export]-[File Format]=[Application]-[Save] を選ぶ。
4 作成されたNewFile.appをFinderのツールバーにCommandキー同時押しでドラッグ・ドロップ。
5. 新規ファイルを作成したい場合に、ツールバーのNewFile.appをクリックする。
Terminal
Add Service to Finder Toolbar? - Apple Community
現在フォルダーを端末で開きたいことがよくある。ツールバーアプリにするといい。
Terminal.scptなどの名前で以下のファイルを用意する。
tell application "Finder"
set myWin to window 1
set thePath to (quoted form of POSIX path of (target of myWin as alias))
tell application "Terminal"
activate
tell window 1
do script "cd " & thePath
end tell
end tell
end tell
Script Editorで開いてappにエクスポートして登録する。
Developer
Automator
Macの自動化のツール。
格納場所
【Mac】Finderの右クリックで任意のファイル(txt,xlsx,docx,pptx等)を作成する方法 - 自由気ままに書いちゃおう
~/Library/Servicesに格納される。
AppleScript
- 初めての Apple Script #AppleScript - Qiita
- Mac用スクリプトエディタユーザガイド - Apple サポート (日本)
- Script factory : AppleScript ことはじめ
WindowsのWSH相当。1993年の昔からある。
Script Editorでappファイルなどに変換できたりする。Macの自動化で重要なスクリプト言語。
CommandLineTools
/Library/Developer/CommandLineTools/のあたりにgitなどのOS標準の開発ツール類がある。
他に、/Applications/Xcode.app にもあったりする。
Package Manager
Homebrew
Homebrew — The Missing Package Manager for macOS (or Linux)
Install
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
これで/optにインストールされる。
最後にstdinに表示される以下のコマンドを実行してPATHを追加する。
echo >> /Users/z.ken.senoo/.bash_profile
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> /Users/z.ken.senoo/.bash_profile
eval "$(/opt/homebrew/bin/brew shellenv)"
Other
破損App
Macで"壊れているため開けません"の古いappを開く #Mac - Qiita
xattr -rc /Applications/LegacyAwesome.app
これで属性を除去して解決することが多い。
Terminalが予期しない理由で終了しました
MAC「Terminalが予期しない理由で終了しました」のポップが出てターミナルが起動できない #Mac - Qiita
[~/Saved Application State/com.apple.Terminal.savedState] を改名したら起動できた。詳細不明。
画像の一括リサイズ
https://chatgpt.com/share/6810e6d6-b388-800b-8d38-2beda0da7552
- プレビューアプリでまとめて開いて、サムネイルを全選択。
- [Tool]-[Adjust size]
これで一括リサイズできる。
Photos
iPhoneとMacで共通の写真管理アプリ。クラウドで共有される。
ファイル取得
https://chatgpt.com/share/680b7873-4f00-800b-9049-03648eb29aef
使い方に癖がある。画像はExportで取得しないとファイルとして取得できない。
複数画像のPDFへの統合
いくつか方法がある。
- Previewアプリでまとめて開いて、Printで印刷画面でPDFに保存する。
- Finderで対象ファイルを選択-[右クリック]-[Quick actions]-[Create PDF]。
2番目のQuick actionsが一番簡単。
画像の同期
[Sharing]-[Shared Albums] に共有用のアルバムを作って、そちらに画像をドラッグ・ドロップで設定する。すると、iPhoneのPhotosでもこれらの画像にアクセス可能になる模様。
これが画像の同期手っ取り早い。
UNIX
Other
cron
About
UNIX系OSのジョブ管理ツール。タスクの定期実行を可能にする。
cronの名前は時間を意味するギリシア語chronosに由来する。
指定した時間に1回だけ実行するなら、atがある。電子メールの送信などで役立つ。
Format
cronの動作はcrontab (cron table) ファイルで指定する。
以下の形式になっている。
# ┌───────────── 分(0〜59) # │ ┌───────────── 時(0〜23) # │ │ ┌───────────── 日(1〜31) # │ │ │ ┌───────────── 月(1〜12)JAN-DEC # │ │ │ │ ┌───────────── 曜日(0〜6〈日〜土〉、一部のシステムでは7も日曜日) SUN-SAT # │ │ │ │ │ # │ │ │ │ │ # * * * * * [予約するコマンド]
日時部分はいくつか指定方法がある。
- すべて。
- /n: nごとに実行 (*/5)。
- ,: 複数の時間間隔を指定 (1,2,3)
- -: 範囲。
- %: コマンド内の%はエスケープされていないと改行文字に変換され、標準入力としてコマンドに渡される。
ユーザーはcrontab -eで自分の設定ファイルを編集できる。crontabファイルの直接編集は非推奨で、crontabコマンドでの修正が推奨されている。
ファイルの他に標準入力も受け付ける。
Command
- 編集: crontab -e
- 表示: crontab -l
- 削除: crontab -r
-u: 実行ユーザー指定。
オプションを指定しない場合、引数のファイルの内容のcronを実行する。引数がなければ標準入力。
既存のcrontabの内容を編集したい場合、方法が2種類ある。
- crontab -e
- (crontab -l ; echo ) | crontab: crontab -lで現在のcrontabの内容が出力されるので、これを加工してcrontabに再度流し込む。
- crontab [file]
2の方法は融通が利く。crontab [file] でファイルにcrontabの内容を記載しておいて、これをVCSで管理というのも悪くはない。
Log
/var/log/cron
cron - Verify if crontab works - Ask Ubuntu
デーモン自体の確認は以下。
systemctl status cron systemctl restart cron
cronへの登録時のコマンドが標準出力を持つ場合、メールでユーザーに内容を送信する。
この挙動が鬱陶しいので、cronへの登録時にログを全て破棄するような設定が奨励されることがある。
>/dev/null 2>&1
crontabのガイドライン #CentOS - Qiita
ただ、全部捨てると失敗時も、いつから失敗しているかの情報も一切わからない。残したほうがいい。
>>/var/log/log_$(date +\%Y\%m\%d).log 2>&1
環境変数
POSIXにあるように、HOME/LOGNAME/PATH/SHELLのみが最低限デフォルト値が用意されていて存在が保証される。
cronの環境変数。
echo '* * * * * env >/tmp/env.log' | crontab
FROM php:7.3.23-apacheのDebian 10の場合。
HOME=/root LOGNAME=root PATH=/usr/bin:/bin SHELL=/bin/sh PWD=/root
PATHはcommand -p getconf PATHを参照していると思われる。
cronに登録したコマンドが動作しない理由の一つがPATH。注意する。crontab内では変数の代入などは独自拡張になる。基本は実行するスクリプトファイルか、最後のコマンド実行部分で自分で設定する。
anacron
システムのcrontab (cronとanacronの違い) #Linux - Qiita
cronの亜種にanacronがある。
- 遅延実行: サーバーダウンなどでスキップされた処理を、復帰時に実行する。
- 負荷分散: 最小1日単位のスケジュールしかできない代わりに、自動でサーバーの負荷をみて分散実行してくれる。
guide
crontabのガイドライン #CentOS - Qiita
crontabでの実行開始時間は検討が必要。0分と00:00は他のサブシステムの定期タスクの密集時間のことが多いのでここは避けて5分や10分にずらすのが無難。
systemd
GNU/Linux向けのシステム管理ソフトウェア。大量のソフトの統合。サーバーソフトウェアの管理で非常に重要。
systemdのメインデーモンの/sbin/systemdは/sbin/initにリンクされていて、既存のSysV initを置換する最初のプロセスとなる。
ssytemd自体は本体の他に4のコンポーネントから構成。
- utility
- daemon
- target: ユニットのグループ化や処理の順序や依存関係の定義。unitの一種。
- unit: systemdの管理処理の単位。System V initのサービスに相当。
systemdはsystemdの管理対象となる処理の単位のユニットでシステムを管理する。ユニットは12のタイプがある。
- service: デーモンの開始と制御担当。
- socket
- target
- device
- mount
- automount
- timer
- swap
- path
- slice
- scope
- special
特に重要なのはserviceユニット。
Unit
ユニットファイルはini形式のテキストファイル。
Unit File Load Path
https://chatgpt.com/c/6753b416-3d48-800b-ae6d-fcb43df956e3
いくつもの検索パスがある。が、基本的にはいかに配置する。
- system: /etc/systemd/system/
- $XDG_CONFIG_HOME/systemd/user/ ($XDG_CONFIG_HOMEのデフォルトは~/.config)
従って、基本は~/.config/systemd/userに配置すればいい。
systemctl
systemdとservice managerの制御用のコマンド。状態管理からユニットの登録・削除など基本はこのコマンドとサブコマンドで全部対応する。非常に重要。
systemctl [OPTIONS...] COMMAND [UNIT...]
--userオプションでユーザー扱いしない場合、sudoで管理者権限が必要。
基本的な流れは以下となる。
- ユニットファイル (.service) を作成して配置 (/etc/systemd/system or ~/.config/systemd/user)。
- systemctl enable [unit] で登録。
- systemctl restart [unit] で起動。
Commands
COMMANDは種類ごとに以下を解釈。大量にある。
Unit Commands (Introspection and Modification)
ユニット自体を制御するコマンド。
- list-units
- list-automounts
- list-paths
- list-sockets
- list-timers
- is-active
- is-failed
- status
- show
- cat
- help
- list-dependencies
- start
- stop
- reload
- restart
- try-restart
- reload-or-restart
- try-reload-or-restart
- isolate
- kill
- clean
- freeze
- thaw
- set-property
- bind
- mount-image
- service-log-level
- service-log-target
- reset-failed
- whoami
重要なもの。
- 情報
- status: ユニットの情報を表示。動作確認。稼働やエラーの確認などができる。問題があったらまずこれで確認。
- list-units: systemdのメモリー内に存在 (実行中・ロード済み) するユニットを一覧。
- 操作
- restart: 手動再起動。
- start: 手動起動。
- stop: 手動停止。
- 設定
- reload: ユニットにユニット固有の設定のリロードを指令する。apache2の場合httpd.conf。
- daemon-reload: ユニットの設定をリロードする。apacheの場合apache.service。
Unit File Commands
- list-unit-files
- enable
- disable
- reenable
- preset
- preset-all
- is-enabled
- mask
- unmask
- link
- revert
- add-wants
- edit
- get-default
- set-default
ユニットファイルの操作。
- list-unit-files: システムにインストール済みの全ユニットファイルを一覧。list-unitsと異なり、読み込んでいないものも表示する。ユニットファイルの存在と有効・無効状態の確認に使う。あまり使わないと思う [https://chatgpt.com/c/6753b416-3d48-800b-ae6d-fcb43df956e3]。
- enable: ユニットを有効にする。設定ファイルの場所からシンボリックリンクを作成する。
- disable: ユニットを無効にする。シンボリックリンクを削除。
- Machne Commands
- list-machines
- Job Commands
- list-jobs
- cancel
- Environment Commands
- show-environment
- set-environment
- unset-environment
- import-environment
- Manager State Commands
- daemon-reload
- daemon-reexec
- log-level
- log-target
- service-watchdogs
System Commands
- is-system-running
- default
- rescue
- emergency
- halt
- poweroff
- reboot
- kexec
- soft-reboot
- exit
- switch-root
- sleep
- suspend
- hibernate
- hybrid-sleep
- suspend-then-hibernate
特に便利なもの。
- poweroff: 電源をオフにできる。
Options
オプションも大量にある。
- -t, --type=
- --state=
- -p, --property=
- -P
- -a, --all
- -r, --recursive
- --reverse
- --after
- --before
- --with-dependencies
- -l, --full
- --value
- --show-types
- --job-mode=
- -T, --show-transaction
- --fail
- --check-inhibitors=
- -i
- --dry-run
- -q, --quiet
- --no-warn
- --no-block
- --wait
- --user
- --system
- --failed
- --no-wall
- --global
- --no-reload
- --no-ask-password
- --kill-whm
- --kill-value=
- -s, --signal=
- --what=
- -f, --force
- --message=
- --now
- --root=
- --image=
- --image-policy=
- --runtime
- --preset-mode=
- -n, --lines=
- -o, --output=
- --firmware-setup
- --boot-loader-menu=
- --boot-loader-entry=
- -reboot-argument=
- --plain
- --timestep=
- --mkdir
- --marked
- --read-only
- --drop-in=
- --when
- --stdin
- -H, --host=
- -M, --machine=
- -C, --capsule=
- --no-pager
- --legend=
- -h, --help
- --version
特に重要なオプション
- --user: ユーザーとしてservice managerを呼び出す。このオプションを指定することでユーザー権限でsystemdを使える。
- --system: システムとして実行。デフォルト。
systemd-system.conf
systemdの設定ファイルとその格納場所。
システムとユーザーとで参照するファイル・場所が異なる。
- システム: 以下のsystem.confとsystem.conf.d/*.confをこの優先順位で解釈。
- /etc/systemd
- /run/systemd
- /usr/lib/systemd
- ユーザー: ホームディレクトリー、システムの優先順位でuser.confとuser.conf.d/*.conf。
- ~/.config/systemd
- システムのディレクトリー (/etc/systemd /run/systemd /usr/lib/systemd)
特に、ユーザーの~/.config/systemdが重要。ユーザーが自由にできる。
user
- https://chatgpt.com/c/6753b416-3d48-800b-ae6d-fcb43df956e3
- ユーザー権限で systemd のサービスを稼働させる方法 - pyopyopyo - Linuxとかプログラミングの覚え書き -
- CentOS7のsystemdでuserインスタンスを起動する
- レンタルサーバーでNode.jsアプリを永続化する
基本はOS管理なのでroot権限で動作する。が、ユーザー別に登録したりもできる。 そのポイントを整理する。
- ~/.config/systemd/user/*.serviceにユニットファイルを配置。
- systemctlコマンドには常に--userオプションを指定する。
- systemctl --user enable [service]
- systemctl --user restart [service]
なお、ユーザーユニットは、ユーザーがログイン中のみ有効。ログアウト中も稼働させるには、lingerでの登録が必要。
このlingerでの登録が対応していないことが共用サーバーには多い。
その場合はしかたないので、cronで終了していたら再起動するコマンドを登録する。
pgrep -f "node index.js" > /dev/null || (cd index.jsがあるパス && node index.js)
Other
General
Username
パソコンのユーザー名の形式は [A-Za-z0-9._- で最低8文字まで可能 – senooken JP]
- 使用可能文字:
[A-Za-z0-9._-]の正規表現 (ただし,先頭は-以外)。 - 文字数: 最低8文字まで可能。9文字以上は実装依存。
辞書
IMEの辞書登録の駆使で作業効率が大幅に変わる。
頻出単語を入力しておくと良い。
- 個人情報
- 住所
- 氏名
- 電話番号
- メールアドレス
- 人名
- 同僚などよく連絡する人の苗字は登録しておくと楽かも。
- 挨拶
- ありがとうございました。
- よろしくお願いします。
- ご確認お願いします。
- 数字
- 上付き
- 下付き
- 丸付き
| じゅうしょ | |
| しめい | |
| でんわ | 333-4444-4444 |
| でんわ | 111111111111 |
| めあど | |
| めーる |
| あり | ありがとうございました。 | 普通名詞 |
| あり | ありがとうございます。 | 普通名詞 |
| おね | お願いします。 | 普通名詞 |
| ごか | ご確認お願いします。 | 普通名詞 |
| ごた | ご対応ありがとうございました。 | 普通名詞 |
| ごた | ご対応ありがとうございます。 | 普通名詞 |
| よろ | よろしくお願いします。 | 普通名詞 |
RDP
VNCとの違い
* https://www.routerhosting.com/rdp-vs-vnc-remote-desktop-comparison/
* https://superuser.com/questions/32495/whats-the-difference-between-rdp-vs-vnc
* https://ja.wikipedia.org/wiki/%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%E3%83%87%E3%82%B9%E3%82%AF%E3%83%88%E3%83%83%E3%83%97
* https://ja.wikipedia.org/wiki/Virtual_Network_Computing
* https://ja.wikipedia.org/wiki/Remote_Desktop_Protocol
RDPは意味を送受信している、VNCは画像を送受信している。扱うデータ量・負荷が違う。
教育だとか、サポートなどではVNCが有利。普段の使用ではRDPのほうが有利。
リモートデスクトップ
https://www.tmp1024.com/articles/solve-black-screen-when-ubuntu-remote-desktop
Ubuntu 19.10でのWindows 10からのリモートデスクトップの手順を整理する。
まずxrdp (0.9.9-1) をインストールする。
sudo apt install xrdp
その後、Ubuntuはサインアウト・ログアウトする。
Windows 10のリモートデスクトップ (mstsc.exe) を実行して、Ubuntuのホスト名やIPアドレスで接続する。
RDPでのログインユーザーが既にログイン済みだと画面が真っ黒になるらしい。
[リモートデスクトップでアクセスしたら真っ黒の画面が表示される問題の解決 \| 人と情報](https://www.tmp1024.com/articles/solve-black-screen-when-ubuntu-remote-desktop)
そのほか、ログイン時に認証ダイアログが毎回表示される。これはどうにかしたい。
それ以外は良好。
Clipboard
Windows
Windows 10からWin-vでクリップボードマネージャーが起動する。
Hotkey
【Maccy】MacでもWin+Vが使いたいんじゃぁ!! ~ Macでクリップボード履歴を使えるようにしてくれるユーティリティ - Nishiki-Hub
MacとWindowsでクリップボードマネージャーのホットキーを共通化。
C-Cがいいと思う。CopyやClipboardのCだから。いや、C-C/C-M-CはMacの開発者ツールのショートカットキーだからだめ。
M-Cがいいと思う。
CopyQ
Hotkey
Keyboard shortcut to access copyq? · Issue #508 · hluk/CopyQ
- [File]-[Commands](F6)
- [Add]-[Show/hide main window]-[OK]
- [Global Shortcut] の隣のキーを選びショートカットキーを登録-[OK]
Notes/Tag
クリップボードの内容に説明をつけることができる。Note/Tagの2種類がある。
単にタイトルをつけるだけなら、NotesでOK。Tagは分類用。
[右クリック]-[Edit Notes] でNotesを追加・編集できる。
Keybind
App Menu
いわゆる右クリックのコンテキストメニュー。これをショートカットキーで実現する方法一応ある。
Macの場合。「Macの右クリック - Apple サポート (日本)」にあるように、Control-左クリックか、2本指クリック。
- macos - Context Menu (Right Click) keyboard shortcut in Mac OS X - Super User
- Access & Customize Context Menu (Right-click Menu) on Mac
上記にあるように、F12でもできるらしい。ただし事前設定が必要。
[System]-[Accessibility]-[Pointer Control]-[Alternate pointer actions]=[on] にする。これでF12で開ける。右側のオプションボタンで変更もできる。
Key code
Mac
Ref: macos - Where can I find a list of Mac virtual key codes? - Stack Overflow.
以下のコマンドで一覧を確認できる (Mac v14.2.1、MacBook Air (M1, 2020)、 JIS配列)。
grep 'kVK_.*=' /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/Headers/Events.h
一覧。
kVK_ANSI_A = 0x00, kVK_ANSI_S = 0x01, kVK_ANSI_D = 0x02, kVK_ANSI_F = 0x03, kVK_ANSI_H = 0x04, kVK_ANSI_G = 0x05, kVK_ANSI_Z = 0x06, kVK_ANSI_X = 0x07, kVK_ANSI_C = 0x08, kVK_ANSI_V = 0x09, kVK_ANSI_B = 0x0B, kVK_ANSI_Q = 0x0C, kVK_ANSI_W = 0x0D, kVK_ANSI_E = 0x0E, kVK_ANSI_R = 0x0F, kVK_ANSI_Y = 0x10, kVK_ANSI_T = 0x11, kVK_ANSI_1 = 0x12, kVK_ANSI_2 = 0x13, kVK_ANSI_3 = 0x14, kVK_ANSI_4 = 0x15, kVK_ANSI_6 = 0x16, kVK_ANSI_5 = 0x17, kVK_ANSI_Equal = 0x18, kVK_ANSI_9 = 0x19, kVK_ANSI_7 = 0x1A, kVK_ANSI_Minus = 0x1B, kVK_ANSI_8 = 0x1C, kVK_ANSI_0 = 0x1D, kVK_ANSI_RightBracket = 0x1E, kVK_ANSI_O = 0x1F, kVK_ANSI_U = 0x20, kVK_ANSI_LeftBracket = 0x21, kVK_ANSI_I = 0x22, kVK_ANSI_P = 0x23, kVK_ANSI_L = 0x25, kVK_ANSI_J = 0x26, kVK_ANSI_Quote = 0x27, kVK_ANSI_K = 0x28, kVK_ANSI_Semicolon = 0x29, kVK_ANSI_Backslash = 0x2A, kVK_ANSI_Comma = 0x2B, kVK_ANSI_Slash = 0x2C, kVK_ANSI_N = 0x2D, kVK_ANSI_M = 0x2E, kVK_ANSI_Period = 0x2F, kVK_ANSI_Grave = 0x32, kVK_ANSI_KeypadDecimal = 0x41, kVK_ANSI_KeypadMultiply = 0x43, kVK_ANSI_KeypadPlus = 0x45, kVK_ANSI_KeypadClear = 0x47, kVK_ANSI_KeypadDivide = 0x4B, kVK_ANSI_KeypadEnter = 0x4C, kVK_ANSI_KeypadMinus = 0x4E, kVK_ANSI_KeypadEquals = 0x51, kVK_ANSI_Keypad0 = 0x52, kVK_ANSI_Keypad1 = 0x53, kVK_ANSI_Keypad2 = 0x54, kVK_ANSI_Keypad3 = 0x55, kVK_ANSI_Keypad4 = 0x56, kVK_ANSI_Keypad5 = 0x57, kVK_ANSI_Keypad6 = 0x58, kVK_ANSI_Keypad7 = 0x59, kVK_ANSI_Keypad8 = 0x5B, kVK_ANSI_Keypad9 = 0x5C kVK_Return = 0x24, kVK_Tab = 0x30, kVK_Space = 0x31, kVK_Delete = 0x33, kVK_Escape = 0x35, kVK_Command = 0x37, kVK_Shift = 0x38, kVK_CapsLock = 0x39, kVK_Option = 0x3A, kVK_Control = 0x3B, kVK_RightCommand = 0x36, kVK_RightShift = 0x3C, kVK_RightOption = 0x3D, kVK_RightControl = 0x3E, kVK_Function = 0x3F, kVK_F17 = 0x40, kVK_VolumeUp = 0x48, kVK_VolumeDown = 0x49, kVK_Mute = 0x4A, kVK_F18 = 0x4F, kVK_F19 = 0x50, kVK_F20 = 0x5A, kVK_F5 = 0x60, kVK_F6 = 0x61, kVK_F7 = 0x62, kVK_F3 = 0x63, kVK_F8 = 0x64, kVK_F9 = 0x65, kVK_F11 = 0x67, kVK_F13 = 0x69, kVK_F16 = 0x6A, kVK_F14 = 0x6B, kVK_F10 = 0x6D, kVK_F12 = 0x6F, kVK_F15 = 0x71, kVK_Help = 0x72, kVK_Home = 0x73, kVK_PageUp = 0x74, kVK_ForwardDelete = 0x75, kVK_F4 = 0x76, kVK_End = 0x77, kVK_F2 = 0x78, kVK_PageDown = 0x79, kVK_F1 = 0x7A, kVK_LeftArrow = 0x7B, kVK_RightArrow = 0x7C, kVK_DownArrow = 0x7D, kVK_UpArrow = 0x7E kVK_ISO_Section = 0x0A kVK_JIS_Yen = 0x5D, kVK_JIS_Underscore = 0x5E, kVK_JIS_KeypadComma = 0x5F, kVK_JIS_Eisu = 0x66, kVK_JIS_Kana = 0x68
Keyhac
About
Mac版はmac_portブランチ。
Mac
Mac版は英語サイト (craftware - Keyhac) からじゃないとダウンロードできないので注意する。
マニュアル: keyhac: User Manual。
またWindowsと異なり、exeファイルと同じ場所のconfig.pyを読み込んだりはしてくれない。
$HOME/Library/Application Support/Keyhac/に配置する必要がある。
また、そもそもキーコード自体が異なるので、一部は専用に作る必要がある。
Base
config.py内にconfigure(keymap)関数を定義して、この中で設定を記述していく。
引数のkeymapにはKeymapオブジェクトが渡されるのでこれを操作することで設定する。
keymap_global = keymap.defineWindowKeymap()
Keymap.defineWindowKeymapでWindowKeymapオブジェクトを返す。このオブジェクトに対してグローバルキーマップを定義していく。
これが基本。
基本的に全部文字列。キーコードを指定する部分は数値も可能だが、10進数の文字列にしておいたほうがいい。
Modifier
keymap.defineModifierで、Shift/Ctrlのように同時押しに意味のあるキー (modifier) を追加できる。
スペースの左右のキーにShift/Ctrl相当の機能をもたせる上で非常に重要。
# ユーザモディファイアキーの定義 keymap.defineModifier( 235, "User0" )
上記の例では235のキーコードにU0のモディファイアキーを設定している。U0はUser0の短縮表記。ただし、Windows専用。短縮表記は使わない方がいい。
Policy
- スペースの左右のキー (Windows=変換/無変換、Mac=英数/かな) をモディファイアキーに追加。
- LSS/RSSと表記 (Left Side Space/Right Side Space)
- Ctrl/Cmd=CCと表記。
- SpaceはCtrlのワンショットモディファイア。
- LSS=Shift、RSS=U0、Space=CC。
hjklのVimのキー移動を定義したいから、RSSはU0。これは確定。
U0の操作にShiftを組み合わせたいことがあるからLSS=Shiftがいい。
キーの違いで、Windows/Macで共有と独立部分がある?
Package manager
パッケージ
pkgs.org
Debian
- http://deb.debian.org/debian
- http://security.debian.org/debian-security
- http://archive.debian.org/debian/
Ubuntu
# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to # newer versions of the distribution. ## Ubuntu distribution repository ## ## The following settings can be adjusted to configure which packages to use from Ubuntu. ## Mirror your choices (except for URIs and Suites) in the security section below to ## ensure timely security updates. ## ## Types: Append deb-src to enable the fetching of source package. ## URIs: A URL to the repository (you may add multiple URLs) ## Suites: The following additional suites can be configured ## <name>-updates - Major bug fix updates produced after the final release of the ## distribution. ## <name>-backports - software from this repository may not have been tested as ## extensively as that contained in the main release, although it includes ## newer versions of some applications which may provide useful features. ## Also, please note that software in backports WILL NOT receive any review ## or updates from the Ubuntu security team. ## Components: Aside from main, the following components can be added to the list ## restricted - Software that may not be under a free license, or protected by patents. ## universe - Community maintained packages. Software in this repository receives maintenance ## from volunteers in the Ubuntu community, or a 10 year security maintenance ## commitment from Canonical when an Ubuntu Pro subscription is attached. ## multiverse - Community maintained of restricted. Software from this repository is ## ENTIRELY UNSUPPORTED by the Ubuntu team, and may not be under a free ## licence. Please satisfy yourself as to your rights to use the software. ## Also, please note that software in multiverse WILL NOT receive any ## review or updates from the Ubuntu security team. ## ## See the sources.list(5) manual page for further settings. Types: deb URIs: http://archive.ubuntu.com/ubuntu/ Suites: noble noble-updates noble-backports Components: main universe restricted multiverse Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg ## Ubuntu security updates. Aside from URIs and Suites, ## this should mirror your choices in the previous section. Types: deb URIs: http://security.ubuntu.com/ubuntu/ Suites: noble-security Components: main universe restricted multiverse Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
以下のURIがある模様。
- http://archive.ubuntu.com/ubuntu/: メイン。保守対応バージョン。
- http://security.ubuntu.com/ubuntu/: 保安関係。
- http://old-releases.ubuntu.com/ubuntu: 過去アーカイブ。
過去アーカイブを参照するようにする。
APT
Debian系パッケージマネージャーAPTの使用方法 – senooken JP
| 目的 | コマンド |
|---|---|
| 情報 | apt show <package>
|
| 利用可能バージョンの確認 | apt show -a <package>apt list --all-versions <package>
|
| 検索 | apt search <regex>
|
| インストール | sudo apt install <package>sudo apt reinstall <package>sudo apt builde-dep <package>
|
| 更新 | sudo apt updatesudo apt upgradesudo apt full-upgradesudo apt install <package>
|
| 削除 | sudo apt remove <package>sudo apt purge <package>sudo apt autoremovesudo apt cleansudo apt autoclean
|
| インストール済みパッケージの確認 | apt list --installeddpkg -l | grep '^.i'apt-mark showmanualapt-mark showauto
|
| パッケージ中身の一覧 | dpkg -L <package>
|
| ファイルの該当パッケージの確認 | dpkg -S <file>
|
| 依存関係の確認 | apt show <package> | grep Dependsapt depends <package>apt rdepends <package>
|
| パッケージの自動・手動フラグの指定 | apt-mark auto <package>apt-mark manual <package>
|
| パッケージのhold | apt-mark hold <package>apt-mark unhold <package>apt-mark showhold
|
| リポジトリーの追加・削除・編集 | sudo add-apt-repository <repository>sudo add-apt-repository -r <repository>sudo apt edit-sources
|
| パッケージの操作履歴の確認 | cat /var/log/apt/history.log
|
リポジトリー
- sources.list(5) — apt — Debian buster — Debian Manpages
- add-apt-repository(1) — software-properties-common — Debian buster — Debian Manpages
- apt(8) — apt — Debian buster — Debian Manpages
aptの参照元のリポジトリーのリスト。以下の2か所。
- /etc/apt/sources.list
- /etc/apt/sources.list.d/
直接テキストエディターで編集も可能だが、操作用の専用コマンドadd-apt-repositoryがある。
sudo add-apt-repository 'deb http://myserver/path/to/repo stable myrepo' sudo add-apt-repository -r ppa:user/repository
-r --removeで該当リポジトリーを削除。ただ、既存のリポジトリーの確認が必要なので、自動化用。
他に、apt edit-sorucesコマンドがある。これを使うと、nano/viなどの選ばれたテキストエディターで構文チェックしながらsources.listを編集。引数を指定したら、sources.list.d以下を編集。visudoのapt版。
編集時はapt edit-sourcesを使うとよさそう。
edit-sourcesで選択したテキストエディターはsudo select-editorか~/.selected_editrで編集可能 (select-editor(1) — sensible-utils — Debian buster — Debian Manpages)。
sources.list
/etc/apt/sources.list.dディレクトリーには追加のリストを配置する。拡張子は.listか.sourcesで、それぞれの拡張子ごとに、ファイル形式が異なる。
.list one-line-style format
.listの拡張子には、昔ながらの1行形式を指定する。
deb [ option1=value1 option2=value2 ] uri suite [component1] [component2] [...] deb-src [ option1=value1 option2=value2 ] uri suite [component1] [component2] [...]
.sources deb822-style format
.sourcesの拡張子には、Debianのメタデータファイルで使われる構文を使う。
Types: deb deb-src
URIs: uri
Suites: suite
Components: [component1] [component2] [...]
option1: value1
option2: value2
- deb: debian archive, distribution/componentを参照。
- deb-src: ソースコードを参照。
- uri: 配布元を指定。
- suite: stable, testing, codename (buster/bullseyeなど)。uriのサブディレクトリー正確なパス (終端/)。そうでなければ、componentを指定。
- component: main, contrib, non-free, non-free-firmware
ただ、Ubuntuの場合、独自拡張が入っていて、suiteとcomponentは以下も追加。
- suite:
- <name>-updates: 主なバグ修正更新。
- <name>-backports: テストされていないが便利な機能。
- components:
- restricted: 不自由ソフト。
- universe: コミュニティー保守パッケージ。
- multiverse: コミュニティ保守不自由ソフト。
suiteとcomponentsを整理する。
- suite:
- <name>: コードネーム。メインパッケージ。
- <name>-security: たぶん保安関係。文書に記載なし。
- <name>-updates: 主なバグ修正更新。
- <name>-backports: テストされていない最新更新。
- component: main, contrib, non-free, non-free-firmware
- restricted: 不自由ソフト。
- universe: コミュニティー保守パッケージ。
- multiverse: コミュニティ保守不自由ソフト。
例
deb [signed-by=/usr/share/keyrings/debian-archive-keyring.gpg] http://deb.debian.org/debian trixie main contrib non-free non-free-firmware deb [signed-by=/usr/share/keyrings/debian-archive-keyring.gpg] http://deb.debian.org/debian trixie-updates main contrib non-free non-free-firmware deb [signed-by=/usr/share/keyrings/debian-archive-keyring.gpg] http://deb.debian.org/debian-security trixie-security main contrib non-free non-free-firmware
Types: deb URIs: http://deb.debian.org/debian Suites: trixie trixie-updates Components: main contrib non-free non-free-firmware Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg Types: deb URIs: http://deb.debian.org/debian-security Suites: trixie-security Components: main contrib non-free non-free-firmware Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
add-apt-repository
add-apt-repository(1) — software-properties-common — Debian buster — Debian Manpages
add-apt-repository [OPTIONS] REPOSITORY
3種類の記法が許容されている。
- sources.listのdeb行
- ppa:<user>/<ppa-name>
- distoribution component指定
https://grok.com/share/c2hhcmQtMw%3D%3D_16ab69f8-fae4-46b8-9f20-81a98ec20376
CODENAME=$(lsb_release -sc) sudo add-apt-repository "deb http://old-releases.ubuntu.com/ubuntu $CODENAME main universe multiverse" -y && \ sudo add-apt-repository "deb http://old-releases.ubuntu.com/ubuntu $CODENAME-updates main universe multiverse" -y && \ sudo add-apt-repository "deb http://old-releases.ubuntu.com/ubuntu $CODENAME-security main universe multiverse" -y
Ubuntuなら上記で古いパッケージも取れる。
dockerで使う場合、lsb_releaseやadd-apt-repositoryはコマンドがそもそもないので、使わない方法での対応が必要。
# RUN sh -c '\ # CODENAME=$(sed -n "/^VERSION_CODENAME/s/^.*=//p" /etc/os-release) && \ # echo "deb http://archive.debian.org/debian-security $CODENAME main" >>/etc/apt/sources.list && \ # echo "deb http://archive.debian.org/debian-security $CODENAME-security main " >>/etc/apt/sources.list && \ # echo "deb http://archive.debian.org/debian-security $CODENAME-updates main " >>/etc/apt/sources.list'
RUN sed -i 's|http://deb.debian.org/debian|http://archive.debian.org/debian|g' /etc/apt/sources.list && \
sed -i 's|http://security.debian.org/debian-security|http://archive.debian.org/debian-security|g' /etc/apt/sources.list && \
GPG error
https://grok.com/share/c2hhcmQtMw%3D%3D_4925c047-4ca3-4612-a86a-93085596ac62
Debian apt update GPG error #Docker - Qiita
FROM php:7.0.33-apacheなど古めのphp+apcheを使うとDebianも古くてapt updateがうまくいかない。
0.560 Get:4 http://archive.debian.org/debian stretch Release [118 kB] 0.819 Err:5 http://archive.debian.org/debian stretch-updates Release 0.819 404 Not Found [IP: 10.0.0.28 8080] 0.831 Get:6 http://archive.debian.org/debian stretch Release.gpg [3177 B] 0.898 Ign:6 http://archive.debian.org/debian stretch Release.gpg 0.900 Reading package lists... 0.905 W: GPG error: http://archive.debian.org/debian-security stretch/updates InRelease: The following signatures were invalid: EXPKEYSIG AA8E81B4331F7F50 Debian Security Archive Automatic Signing Key (9/stretch) <ftpmaster@debian.org> The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 112695A0E562B32A 0.905 E: The repository 'http://archive.debian.org/debian-security stretch/updates InRelease' is not signed. 0.905 E: The repository 'http://archive.debian.org/debian stretch-updates Release' does not have a Release file. 0.905 W: GPG error: http://archive.debian.org/debian stretch Release: The following signatures were invalid: EXPKEYSIG 04EE7237B7D453EC Debian Archive Automatic Signing Key (9/stretch) <ftpmaster@debian.org> EXPKEYSIG EF0F382A1A7B6500 Debian Stable Release Key (9/stretch) <debian-release@lists.debian.org> The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 648ACFD622F3D138 NO_PUBKEY 0E98404D386FA1D9 0.905 E: The repository 'http://archive.debian.org/debian stretch Release' is not signed.
gpg errorがでている。これはまずい。
Debian apt update GPG error #Docker - Qiita
FROM php:7.0.33-apache
RUN sed -i 's|deb.debian.org/debian|archive.debian.org/debian|g' /etc/apt/sources.list && \
sed -i 's|security.debian.org/debian-security|archive.debian.org/debian-security|g' /etc/apt/sources.list
RUN apt-get update \
; apt-get install -y --allow-unauthenticated debian-archive-keyring
RUN apt update ; apt install -y unzip
こんな感じでリポジトリーを古いものにして、鍵をインストールしたら解決した。意味がよくわからない。
いや、単にこれでもいけた。
FROM php:7.0.33-apache
RUN sed -i -e 's|deb.debian.org/|archive.debian.org/|g' \
-e 's|security.debian.org/|archive.debian.org/|g' /etc/apt/sources.list
RUN apt-get update ; apt-get install -y --allow-unauthenticated unzip
FROM php:7.4.33-apache RUN apt update ; apt install -y unzip
