[{"data":1,"prerenderedAt":312},["ShallowReactive",2],{"$fXuUGUHMhglSut9o39tGMFB0iRvSW3VVifAo8Q9uAqyU":3,"$f5Eh4oAL-Sq1wo_TsbN7sI5lLT3ryVzmADKKxobmJKyA":92,"$fXAKnubYD1jouLTcBUOnQffH2rQn11OA-QhMDUyzqkMk":215},{"entry":4,"before":55},{"metadata":5,"sys":8,"fields":29},{"tags":6,"concepts":7},[],[],{"space":9,"id":14,"type":15,"createdAt":16,"updatedAt":17,"environment":18,"publishedVersion":22,"revision":23,"contentType":24,"locale":28},{"sys":10},{"type":11,"linkType":12,"id":13},"Link","Space","jmfsolylwbqz","jBqOc4f2Q8xuAReMTNli2","Entry","2026-05-17T15:49:45.333Z","2026-05-17T15:57:12.990Z",{"sys":19},{"id":20,"type":11,"linkType":21},"master","Environment",79,2,{"sys":25},{"type":11,"linkType":26,"id":27},"ContentType","blogPost","ja-JP",{"title":30,"slug":31,"category":32,"body":51,"description":52,"legacy":53,"enableAd":54,"enableCommentField":54},"Jujutsuのマージコンフリクト解決ツールとして IntelliJ IDEA を使用する方法（macOS）","jujutsu-merge-idea",{"metadata":33,"sys":36,"fields":48},{"tags":34,"concepts":35},[],[],{"space":37,"id":39,"type":15,"createdAt":40,"updatedAt":40,"environment":41,"publishedVersion":43,"revision":44,"contentType":45,"locale":28},{"sys":38},{"type":11,"linkType":12,"id":13},"5MKCmbhhcqboMXodYszCG6","2021-11-16T05:31:22.875Z",{"sys":42},{"id":20,"type":11,"linkType":21},3,1,{"sys":46},{"type":11,"linkType":26,"id":47},"category",{"name":49,"slug":50},"役立ち情報","useful","今回は、Gitに被せるVCSツールであるJujutsuの、マージコンフリクトツールとしてIntelliJ IDEAを使用する方法を説明します。JujutsuにはビルトインでTUIのコンフリクト解決ツールが備わっていますが、これがまぁ __めちゃくちゃ分かりづらい__。私は今までにIDEA以上に直感的で使いやすいコンフリクト解決ツールを見たことがないですので、それを使いたいと思った次第です。\n\n## 普通にやってみるも・・・\n\nちなみに、今回の環境はmacOS 26.5、IDEA 2026.1.2です。\n\n少し調べてみたところ、GitのCLIで使用するための、マージ用コマンドが存在するようです。\n\nhttps://www.jetbrains.com/ja-jp/help/idea/command-line-merge-tool.html\n\nこれをJujutsuの設定（~/.config/jj/config.toml）に当てはめていきます。Jujutsu側の設定は以下のページにありました。\n\nhttps://docs.jj-vcs.dev/latest/config/#setting-up-a-custom-merge-tool\n\n```TOML\n[ui]\nmerge-editor = \"idea\"\n\n[merge-tools.idea]\nprogram = \"idea\"\nmerge-args = [\"merge\", \"$left\", \"$right\", \"$base\", \"$output\"]\n```\n\nこの状態で起動してみるも・・・なんかIDEA側にエラーメッセージが、、、\n\n```\nError executing command 'merge': Cannot find file: /var/folders/cq/xq5tz4yx01xd26r5l74v14qm0000gn/T/jj-resolve-PiKb1j/file.txt\n```\n\nJujutsu側の挙動を見るに、どうやら`idea`コマンドはマージの完了を待たずに終了してしまい、そのせいでマージ用の一時ファイルが削除されてしまうようです。上のドキュメントを見ると、`--wait`オプションを使うと待機させられると書かれているので、merge-argsを編集してみます。\n\n```TOML\n[merge-tools.idea]\nmerge-args = [\"--wait\", \"merge\", \"$left\", \"$right\", \"$base\", \"$output\"]\n```\n\nすると、なにやら上部のツールバーが消滅した「Light edit mode」なる見慣れない画面が出現。しかも「merge」という名前の存在しないファイルが開かれています。なんでや\n\n`merge`と`--wait`を逆にしても、「--wait」という名前のファイルがmergeコマンドに渡されてしまい、引数の数が一致しない、と怒られてしまいました。\n\n## 最終的に画面は開いたが・・・\n\n最終的にたどり着いた設定はこちらです。\n\n```TOML\n[ui]\nmerge-editor = \"idea\"\n\n[merge-tools.idea]\nprogram = \"open\"\nmerge-args = [\"-Wna\", \"IntelliJ IDEA.app\", \"--args\", \"merge\", \"$left\", \"$right\", \"$base\", \"$output\"]\n```\n\nToolboxが生成するスクリプトを介さず、openコマンドでIDEAを直接開きます。openコマンドに対し-Wオプションを追加することで、開いたプログラムの終了まで待機させることができます。この状態で`jj resolve`を実行すると…\n\n![image.webp](https://images.ctfassets.net/jmfsolylwbqz/6xVCpV0grvsIZvNKrSeCbQ/c6bcf6a3c7bd96b59c4783407d23f5fa/image.webp)\n\nついに、マージ画面が表示されました！プロジェクト外ファイル編集の確認ダイアログは表示されるものの、早速解決して「Apply」をクリックすると…\n\n![image.webp](https://images.ctfassets.net/jmfsolylwbqz/7grLpZkQEokgHReRDsEUOc/1b6e4fa1097b4c87ea6a41322d877b95/image.webp)\n\n__ここに来てIDE側のバグに阻まれる。__\n\n要は、UIスレッドで書き込み処理はできないよというエラーです。つまりIDEが正しく実装されていないという意味です。こればっかりは修正を待つしか無いですが、当面はマージ完了後のファイルをコピペして対応していきましょう…","",false,true,{"metadata":56,"sys":59,"fields":70},{"tags":57,"concepts":58},[],[],{"space":60,"id":62,"type":15,"createdAt":63,"updatedAt":64,"environment":65,"publishedVersion":67,"revision":23,"contentType":68,"locale":28},{"sys":61},{"type":11,"linkType":12,"id":13},"44OAk3fEMxgnCY5QzxPiDr","2026-05-06T04:47:12.868Z","2026-05-06T04:47:37.284Z",{"sys":66},{"id":20,"type":11,"linkType":21},31,{"sys":69},{"type":11,"linkType":26,"id":27},{"title":71,"slug":72,"category":73,"body":91,"description":52,"legacy":53,"enableAd":54,"enableCommentField":54},"【Submon】最小iOSバージョンをiOS 16へ引き上げます","submon-min-ios-16",{"metadata":74,"sys":77,"fields":88},{"tags":75,"concepts":76},[],[],{"space":78,"id":80,"type":15,"createdAt":81,"updatedAt":82,"environment":83,"publishedVersion":85,"revision":23,"contentType":86,"locale":28},{"sys":79},{"type":11,"linkType":12,"id":13},"1AZ6Df2460uf9EaWHYRZi2","2022-04-25T12:44:16.773Z","2022-04-28T14:13:15.068Z",{"sys":84},{"id":20,"type":11,"linkType":21},5,{"sys":87},{"type":11,"linkType":26,"id":47},{"name":89,"slug":90},"Submonのお知らせ","submon-info","いつもSubmonをご利用いただきありがとうございます。\n\nこの度、安定してアプリをご利用いただくため、今後リリース予定のSubmonより、インストール可能な最小iOSバージョンを以下の通り変更いたします。ご不便をおかけしますが、新しいiOSへ更新した上でご利用ください。\n\n【実施バージョン】\u003Cbr>\nv2.0.0（リリース時期未定）\n\n【変更前】\u003Cbr>\niOS 13以上\n\n【変更後】\u003Cbr>\n__iOS 16以上__",{"sys":93,"total":95,"skip":96,"limit":85,"items":97,"includes":189},{"type":94},"Array",104,0,[98,113,132,151,170],{"fields":99,"sys":112},{"title":71,"slug":72,"category":100},{"metadata":101,"sys":104,"fields":111},{"tags":102,"concepts":103},[],[],{"space":105,"id":80,"type":15,"createdAt":81,"updatedAt":82,"environment":107,"publishedVersion":85,"revision":23,"contentType":109,"locale":28},{"sys":106},{"type":11,"linkType":12,"id":13},{"sys":108},{"id":20,"type":11,"linkType":21},{"sys":110},{"type":11,"linkType":26,"id":47},{"name":89,"slug":90},{"createdAt":63,"id":62,"type":15},{"fields":114,"sys":129},{"title":115,"slug":116,"category":117},"DartのSwitch式/文、when句、パターンマッチング周りのチートシート","dart-pattern-matching",{"metadata":118,"sys":121,"fields":128},{"tags":119,"concepts":120},[],[],{"space":122,"id":39,"type":15,"createdAt":40,"updatedAt":40,"environment":124,"publishedVersion":43,"revision":44,"contentType":126,"locale":28},{"sys":123},{"type":11,"linkType":12,"id":13},{"sys":125},{"id":20,"type":11,"linkType":21},{"sys":127},{"type":11,"linkType":26,"id":47},{"name":49,"slug":50},{"createdAt":130,"id":131,"type":15},"2026-01-15T15:27:29.616Z","5rj9AuEsebufNWtBTlTu6F",{"fields":133,"sys":148},{"title":134,"slug":135,"category":136},"【Dart/Flutter】とてもいい感じに末尾カンマを強制できるLintプラグインを作ったよ","better-require-trailing-commas",{"metadata":137,"sys":140,"fields":147},{"tags":138,"concepts":139},[],[],{"space":141,"id":39,"type":15,"createdAt":40,"updatedAt":40,"environment":143,"publishedVersion":43,"revision":44,"contentType":145,"locale":28},{"sys":142},{"type":11,"linkType":12,"id":13},{"sys":144},{"id":20,"type":11,"linkType":21},{"sys":146},{"type":11,"linkType":26,"id":47},{"name":49,"slug":50},{"createdAt":149,"id":150,"type":15},"2026-01-15T15:06:58.744Z","7DWX6Gej091IAM1nvGIaiw",{"fields":152,"sys":167},{"title":153,"slug":154,"category":155},"Crashlyticsのデバッグシンボルのアップロードを、CocoaPodsからSwiftPMに移行する","upload-crashlytics-debug-symbols-with-swiftpm",{"metadata":156,"sys":159,"fields":166},{"tags":157,"concepts":158},[],[],{"space":160,"id":39,"type":15,"createdAt":40,"updatedAt":40,"environment":162,"publishedVersion":43,"revision":44,"contentType":164,"locale":28},{"sys":161},{"type":11,"linkType":12,"id":13},{"sys":163},{"id":20,"type":11,"linkType":21},{"sys":165},{"type":11,"linkType":26,"id":47},{"name":49,"slug":50},{"createdAt":168,"id":169,"type":15},"2026-01-13T14:08:17.070Z","7hj5PFf8Y2yNv9MuY5Rxw6",{"fields":171,"sys":186},{"title":172,"slug":173,"category":174},"【Jetbrains IDEs】Dev ContainerでIDEバックエンドのメモリヒープ設定を書き込むには、postAttachCommandを使う","devcontainer-jetbrains-backend-memory-setting",{"metadata":175,"sys":178,"fields":185},{"tags":176,"concepts":177},[],[],{"space":179,"id":39,"type":15,"createdAt":40,"updatedAt":40,"environment":181,"publishedVersion":43,"revision":44,"contentType":183,"locale":28},{"sys":180},{"type":11,"linkType":12,"id":13},{"sys":182},{"id":20,"type":11,"linkType":21},{"sys":184},{"type":11,"linkType":26,"id":47},{"name":49,"slug":50},{"createdAt":187,"id":188,"type":15},"2025-12-24T10:04:08.997Z","4mqFGBFZqEtNN0LUoivz69",{"Entry":190},[191,203],{"metadata":192,"sys":195,"fields":202},{"tags":193,"concepts":194},[],[],{"space":196,"id":80,"type":15,"createdAt":81,"updatedAt":82,"environment":198,"publishedVersion":85,"revision":23,"contentType":200,"locale":28},{"sys":197},{"type":11,"linkType":12,"id":13},{"sys":199},{"id":20,"type":11,"linkType":21},{"sys":201},{"type":11,"linkType":26,"id":47},{"name":89,"slug":90},{"metadata":204,"sys":207,"fields":214},{"tags":205,"concepts":206},[],[],{"space":208,"id":39,"type":15,"createdAt":40,"updatedAt":40,"environment":210,"publishedVersion":43,"revision":44,"contentType":212,"locale":28},{"sys":209},{"type":11,"linkType":12,"id":13},{"sys":211},{"id":20,"type":11,"linkType":21},{"sys":213},{"type":11,"linkType":26,"id":47},{"name":49,"slug":50},{"sys":216,"total":217,"skip":96,"limit":85,"items":218,"includes":298},{"type":94},29,[219,234,249,264,279],{"fields":220,"sys":233},{"title":115,"slug":116,"category":221},{"metadata":222,"sys":225,"fields":232},{"tags":223,"concepts":224},[],[],{"space":226,"id":39,"type":15,"createdAt":40,"updatedAt":40,"environment":228,"publishedVersion":43,"revision":44,"contentType":230,"locale":28},{"sys":227},{"type":11,"linkType":12,"id":13},{"sys":229},{"id":20,"type":11,"linkType":21},{"sys":231},{"type":11,"linkType":26,"id":47},{"name":49,"slug":50},{"createdAt":130,"id":131,"type":15},{"fields":235,"sys":248},{"title":134,"slug":135,"category":236},{"metadata":237,"sys":240,"fields":247},{"tags":238,"concepts":239},[],[],{"space":241,"id":39,"type":15,"createdAt":40,"updatedAt":40,"environment":243,"publishedVersion":43,"revision":44,"contentType":245,"locale":28},{"sys":242},{"type":11,"linkType":12,"id":13},{"sys":244},{"id":20,"type":11,"linkType":21},{"sys":246},{"type":11,"linkType":26,"id":47},{"name":49,"slug":50},{"createdAt":149,"id":150,"type":15},{"fields":250,"sys":263},{"title":153,"slug":154,"category":251},{"metadata":252,"sys":255,"fields":262},{"tags":253,"concepts":254},[],[],{"space":256,"id":39,"type":15,"createdAt":40,"updatedAt":40,"environment":258,"publishedVersion":43,"revision":44,"contentType":260,"locale":28},{"sys":257},{"type":11,"linkType":12,"id":13},{"sys":259},{"id":20,"type":11,"linkType":21},{"sys":261},{"type":11,"linkType":26,"id":47},{"name":49,"slug":50},{"createdAt":168,"id":169,"type":15},{"fields":265,"sys":278},{"title":172,"slug":173,"category":266},{"metadata":267,"sys":270,"fields":277},{"tags":268,"concepts":269},[],[],{"space":271,"id":39,"type":15,"createdAt":40,"updatedAt":40,"environment":273,"publishedVersion":43,"revision":44,"contentType":275,"locale":28},{"sys":272},{"type":11,"linkType":12,"id":13},{"sys":274},{"id":20,"type":11,"linkType":21},{"sys":276},{"type":11,"linkType":26,"id":47},{"name":49,"slug":50},{"createdAt":187,"id":188,"type":15},{"fields":280,"sys":295},{"title":281,"slug":282,"category":283},"Workload Identity 連携で認証する、Google Play Store へのアプリのデプロイ【GitHub Actions】","wif-play-store-deploy",{"metadata":284,"sys":287,"fields":294},{"tags":285,"concepts":286},[],[],{"space":288,"id":39,"type":15,"createdAt":40,"updatedAt":40,"environment":290,"publishedVersion":43,"revision":44,"contentType":292,"locale":28},{"sys":289},{"type":11,"linkType":12,"id":13},{"sys":291},{"id":20,"type":11,"linkType":21},{"sys":293},{"type":11,"linkType":26,"id":47},{"name":49,"slug":50},{"createdAt":296,"id":297,"type":15},"2025-10-25T13:17:15.406Z","4XilX6pLUHyJW71tEU1gYN",{"Entry":299},[300],{"metadata":301,"sys":304,"fields":311},{"tags":302,"concepts":303},[],[],{"space":305,"id":39,"type":15,"createdAt":40,"updatedAt":40,"environment":307,"publishedVersion":43,"revision":44,"contentType":309,"locale":28},{"sys":306},{"type":11,"linkType":12,"id":13},{"sys":308},{"id":20,"type":11,"linkType":21},{"sys":310},{"type":11,"linkType":26,"id":47},{"name":49,"slug":50},1779033499398]