もっとクックでキーマカレーを作った
勝間和代さんのブログでほっとクックの別売りパーツが紹介されており、
苦手な炒めものが美味しくなるかも!?とすぐに購入してしまった。
もっとクックはあめ色玉ねぎが作れるとのことで、付録レシピのキーマカレーを作りました。
作り方は購入者限定のようなので詳細は省きます。
まずはあめ色玉ねぎを作ります。

かなり時間かかりますがいい感じにできました。


完成

レシピの写真より水っぽくなってしまいましたがいい感じに完成しました。
自作のキーマカレーより断然美味しかったです。
感想
手であめ色玉ねぎを作ろうと思うとかなり大変なのでありがたいです。
ほっとクックの苦手な炒めものでも活躍してくれるのではないかと思います。
【Jenkins】フリースタイルジョブでビルドするノードを指定する
Pipelineからフリースタイルプロジェクトのジョブをビルドする時に、
実行ノードを動的に指定する方法メモ。
Pluginが必要なのでnodelabelparameterをインストールしておきます。
plugins.jenkins.io
フリースタイルのジョブでビルドパラメーターにNodeを追加し、
Pipelineでは以下のように指定します。
steps {
build job: 'job_name', parameters: [[$class: 'NodeParameterValue', name: 'param_name', labels: ["${params.node_name}"], nodeEligibility: [$class: 'AllNodeEligibility']]]
}
【Firebase】AndroidだとTokenReceivedが呼ばれないことがある
FCMで個別端末への通知を行うにはトークンを取得する必要があります。
このトークンはFCM初期化後のTokenReceivedで受け取るのですが、
8.0.0以降のバージョンでは2回目以降の起動時にTokenReceivedが呼ばれないことがあります。
Androidでのみ再現し、機種や環境などが原因ではなく稀に発生するようです。
このバグは10.7.0でも修正されていません。
対策
https://github.com/firebase/quickstart-unity/issues/1088#issuecomment-1191030814
同スレッドで対策方法が紹介されています。
FirebaseMessaging.TokenReceivedのデリゲートで受け取らず、
FirebaseMessaging.GetTokenAsync()でトークンを取得します。
public async void InitFirebase()
{
try {
var dependencyStatus = await Firebase.FirebaseApp.CheckAndFixDependenciesAsync();
if (Firebase.DependencyStatus.Available != dependencyStatus) {
// error.
return;
}
#if UNITY_IOS
// iOSは問題ない
Firebase.Messaging.FirebaseMessaging.TokenReceived += OnTokenReceived;
#else
// Androidは手動で取得
Firebase.Messaging.FirebaseMessaging.MessageReceived += OnMessageReceived;
var token = await Firebase.Messaging.FirebaseMessaging.GetTokenAsync();
// register token.
#endif
} catch (Firebase.FirebaseException) {
// error.
} catch (System.Exception) {
// error.
}
}
asyncを使用せずメインスレッドで処理したい場合はContinueWithOnMainThreadを使います。
// using Firebase.Extensionsが必要
Firebase.Messaging.FirebaseMessaging.GetTokenAsync().ContinueWithOnMainThread(task => {
if(true == task.IsCompletedSuccessfully) {
// register token.
}
});
Unity Accelerator アップロードが完了するまで待つ
Unity Accelerator アップロード完了まで待つ
Editorのクリーン起動をしたりReimportを行ってもキャッシュサーバーのキャッシュは少しずつしか増えない。
Acceleratorには強制アップロードのような機能は現時点でないため完了を待つしかない。
ログを見てもエラー内容の説明がないため原因もわからずです。
{ "level": "debug", "ts": "2023-02-03T10:28:42.446Z", "msg": "handled getRequest", "agent_id": "unitytechnologies-accelerator1_id", "agent_name": "unitytechnologies-accelerator1", "component": "pbservice", "subprocess_id": 6, "conn_id": 11, "remote": "hoge", "segment_id": 11952, "namespace": "defaultmetadata", "key": "df4c38c695e1dbbf0361f5687a17e055", "status": "key not found", "status_code": 3, "size": 0, "blob_hash": 0 },
フォーラムでアップロードの完了を待つ方法が紹介されていました。
batchmodeでquitをせずにバックグラウンドタスク(アップロード)の完了を待ちます。
public static async void RunAndQuit()
{
try {
await UniTask.Delay(1000);
var delayCount = 0;
while (Progress.running) {
delayCount++;
if (delayCount % 5 == 0) {
Debug.Log($"Waiting background tasks ... ({Progress.GetCount()} tasks)");
}
await UniTask.Delay(1000);
}
Debug.Log($"{nameof(CacheUploadWaitRunner)}.Run() is complete. ({EditorUserBuildSettings.activeBuildTarget})");
} catch(Exception e) {
Debug.LogException(e);
EditorApplication.Exit(-1);
return;
}
EditorApplication.Exit(0);
}
あまりキャッシュされてないサーバーへのアップロードには5時間半もかかりました。
通常2時間半ほどインポートに時間を要していたプロジェクトでは、
それ以降インポートが30分~40分ほどになりました。
インポート中のログ
... Artifact(artifact id=hoge, static dependencies=fuga, content hash=puyo) uploaded to cacheserver Artifact(artifact id=hoge, static dependencies=fuga, content hash=puyo) uploaded to cacheserver waiting background tasks ... (1 tasks) Artifact(artifact id=hoge, static dependencies=fuga, content hash=puyo) uploaded to cacheserver Artifact(artifact id=hoge, static dependencies=fuga, content hash=puyo) uploaded to cacheserver ...
すべてを一度ではアップロードできないようなので、
Libraryフォルダー削除~起動~プラットフォーム切り替え~を行うパイプラインを組んで毎日ビルドしています。
【Jenkins】ジョブのパラメーターや環境変数をビルド時に一括出力する
printenvコマンドで環境変数やパラメーターの出力が可能です。
Win環境でもMSYS2をインストールしていればshで同じように呼べます。
sh 'printenv'
たまに使うのは、ジョブをビルドするジョブを作る時です。
フリースタイルやScripted Pipelineのジョブはパラメーターを列挙するのが手間だなと思うので。
そういう時に全部出して必要なものだけ渡すジョブを作るのに楽です。
UnityHubとUnityをコマンドラインでインストールする
事前にpkg/exeを用意せずビルド環境を構築するメモ。
UnityHub(2.1.0〜)からコマンドラインがサポートされました。
UnityHubもコマンドでインストールできるので全てコマンドで完結します。
pkg/exeを利用したインストールはこちら。
1. UnityHubをインストール
すでにインストール済みの人はスキップ。
Windowsはwinget、Macはbrewでインストールします。
Windows
https://winget.run/pkg/Unity/UnityHub
winget install -e --id Unity.UnityHub
Mac
https://formulae.brew.sh/cask/unity-hub
brew install --cask unity-hub
2. Unityをインストール
※Mac版の記載なのでWin環境は適宜パスを変更してください。
UnityHub経由でインストールします。
バージョンによって異なるかもしれないのでエラーになる場合はコマンドを確認してください。
/Applications/Unity\ Hub.app/Contents/MacOS/Unity\ Hub -- --headless help
インストール先の変更
Unityのインストール先は以下で変更可能です。
/Applications/Unity\ Hub.app/Contents/MacOS/Unity\ Hub -- --headless install-path --set /Applications/Tool/
インストール
インストールしたいのが最新のUnityでない場合はChangesetの指定が必要です。
Releaseページの一番下に書いています。2020.3.20の場合は41c4e627c95fです。
https://unity.com/releases/editor/whats-new/2020.3.20#release-notes
モジュールが必要な場合は--moduleで指定します。
AndroidはSDKとJDKが子モジュールの扱いとなっており、
一緒にインストールする場合は--childModulesを指定します。
指定しないとインストールするか聞かれるので注意してください。
/Applications/Unity\ Hub.app/Contents/MacOS/Unity\ Hub -- --headless install --version 2020.3.20f1 --changeset 41c4e627c95f --childModules --module android ios
VS CodeからJenkinsへ直接Pipelineを反映する
JenkinsのPipelineを作成する際に、都度ページを開いて反映したり、
コミットしてからビルドを行うのは非常に手間です。
VSCodeのJenkins Jackは手元のPipelineを直接実行する事ができます。

Jenkins Jackについて詳しくはGitHubをご覧ください。
https://github.com/tabeyti/jenkins-jack
初期設定
MarketPlaceのページはこちら
https://marketplace.visualstudio.com/items?itemName=tabeyti.jenkins-jack
チュートリアル
https://github.com/tabeyti/jenkins-jack/blob/master/TUTORIAL.md##setting-up-a-connection
MarketPlaceからインストールして起動すると以下のようなエラーになる場合があります。
Error running command extension.jenkins-jack.connections.add: command 'extension.jenkins-jack.connections.add' not found. This is likely caused by the extension that contributes extension.jenkins-jack.connections.add.
その場合はissues/95を参考にローカルでビルドしてください。
package.jsonを以下のように変更してからビルドする必要があります。
"devDependencies": { "@types/cheerio": "0.22.11", <- 固定 "@types/jenkins": "^0.23.1", "@types/mocha": "^2.2.42", "@types/node": "^8.10.25", "@types/open": "^6.1.0", "@types/request-promise-native": "^1.0.15", "@types/xml2js": "0.4.3", "tslint": "^5.8.0", "typescript": "^3.8.3", "vscode": "^1.1.37" }, "dependencies": { "@types/url-parse": "^1.4.3", "cheerio": "1.0.0-rc.3", <- 固定 "dayjs": "^1.10.7", "jenkins": "^0.28.1", "keytar": "^7.7.0", "open": "^6.2.0", "request": "^2.88.0", "request-promise-native": "^1.0.7", "url-parse": "^1.5.0", "vsce": "^2.15.0", "xml2js": "0.4.3" }
サイドバーにJenkins Jackアイコンが表示されたらJENKINS CONNECTIONSの右にある+ボタンからJenkinsを追加します。
複数追加することができ、「右クリック」->「Select」で切り替えます。
これはsetting.jsonにjenkins-jack.jenkins.connectionsとして保存されます。
主にできること
JENKINS CONNECTIONS
登録されたJenkinsの一覧です。アクティブにできるのは1件なのでSELECTで切り替えます。PIPELINES
パイプラインのジョブ、JOBSはすべててのジョブが表示されます。QUEUE ITEMS
ビルドキューのジョブが表示されます。NODES
ノードが表示されます。
色々行えますがパイプライン実行のみ説明します。
Pipelineとスクリプトをリンクさせる
VS Codeから実行するにはまず手元のファイルとJenkinsのジョブをリンクされます。
PIPELINESからリンクしたいジョブを「右クリック」->「Add Script Link」でスクリプトのファイルを選択します。
リンクされたファイルのパスは絶対パスで保存されるため、
VS CodeのSetting Syncで同期している場合に他環境だと変になります。
そのためsettingsSync.ignoredSettings除外しておくのが良いと思います。
{ "settingsSync.ignoredSettings": [ "jenkins-jack.pipeline.tree.items" ] }
Pipelineのビルド
リンクできたらコマンドパレットからJenkins Jack: Pipeline Executeを選択するか、
PIPELINESでジョブを選択してExecuteします。
ビルドの出力はVS CodeのOutput(Pipeline Jack)に表示されます。
ビルドパラメーターの指定
初期設定だとPipelineをリンクするとスクリプトと同階層に*.config.jsonファイルが生成され、paramsでパラメーターを指定できます。
リンク時点だとparamsが空になっておりパラメーターが書かれていないnull状態です。
一度config.jsonファイルを削除してからPipelineを実行するとパラメーターのデフォルト値が書かれたconfig.jsonにできます。
{ "name": "pipeline", "params": { "hoge": "hello", "fuga": "world" } }
パラメーターを増やしたりデフォルト値を変更させたりしても自動では更新してくれません。
Pipeline › Params: Interactive Inputがtrueだとビルド時に入力することもできます。