SnapでInkdropがインストールできるようになりました

SnapでInkdropがインストールできるようになりました

SnapでInkdropがインストールできるようになりました

Linuxでもアプリの自動アップデートが可能に!

本記事はこちらの日本語訳です。

こんにちは、TAKUYAです。一人で作っているInkdropというMarkdownノートアプリに関するニュースです。

WindowsやmacOS版では、アプリの新バージョンが出たら自動でアップデートする機能が付いています。しかし長い間、Linux向けのアプリ配布ではこの機能が付いていませんでした。嬉しいニュースがあります。InkdropがSnapでインストールできるようになりました。SnapはLinux向けのApp Storeです。本稿で詳しく説明させてください。

この機能を実現するためにフォーラムで協力してくれたDan、Sceptic、Parkerに感謝!

Snapについてご紹介する前に、なぜSnap経由でアプリを配布するに至ったのか、その経緯を説明させてください。

InkdropはElectron製のアプリで、Squirrelを統合することにより自動更新機能を実現していますが、それが動作するのはWindowsとmacOSのみでした。そのため、Linuxユーザは新バージョンが出るたびに手動でダウンロードしなければならず、その体験はひどいものでした。

ただ、Linux向けにはすでに.debと.rpmパッケージを提供していました。なので例えばLaunchpadのようなパッケージホスティングサービスに簡単に公開できるものと僕は思い込んでいました — 残念ながらそれは違いました。去年、実際にそれをやろうとしましたが上手く出来ませんでした。その理由は、Electron製のアプリが非常に多くのモジュールに依存しているからです。例えば、アプリにはNodeJSが直接バンドルされています。この事が理由でLaunchpadにアップロードした時に沢山の警告とエラーが出力されてしまいました。その上、出来上がったパッケージのサイズは126MBにも及び、リポジトリのサイズ上限にすぐに達しそうでした。どうやらElectronはこういったホスティングサービス上での配布があまり想定されていないようです。だからといって手間を掛けて自分でホストしたくありません。

同じくElectron製アプリのAtomエディタがWebUpd8チームによってLaunchpadに公開されているのを見つけました。彼らは一体どうやったのでしょう?! パッケージの中身を調べて驚きました。アプリそのものがパッケージに入っていなかったのです。その代わり、atom-linux64.tar.xzというファイルが同梱されていました:

<span id="c397" class="qx pz io rh b gz rm rn m ro rp">$ lesspipe atom_1.26.1-1~webupd8~0_amd64.deb<br></br>atom_1.26.1-1~webupd8~0_amd64.deb: [36/6658]<br></br> new debian package, version 2.0.<br></br> size 86712130 bytes: control archive=1390 bytes.<br></br> 843 bytes, 19 lines control <br></br> 710 bytes, 10 lines md5sums <br></br> 569 bytes, 33 lines * postinst #!/bin/sh<br></br> 124 bytes, 14 lines * postrm #!/bin/bash<br></br> 49 bytes, 10 lines * preinst #!/bin/sh<br></br> Package: atom<br></br> Version: 1.26.1-1~webupd8~0<br></br> Architecture: amd64<br></br> Maintainer: Alin Andrei <<a class="ag hb" href="mailto:webupd8@gmail.com" rel="noopener ugc nofollow" target="_blank">webupd8@gmail.com</a>><br></br> Installed-Size: 84707<br></br> Depends: git, gconf2, gconf-service, libgtk2.0-0, libudev0 | libudev1, libgcrypt11 | libgcrypt20, libnotify4, libxtst6, libnss3, python, gvfs-bin, xdg-utils, libdbus-1-3, libcap2, libxkbfile1,<br></br> libx11-6, libasound2, libsecret-1-0, gir1.2-secret-1<br></br> Recommends: lsb-release<br></br> Suggests: libgnome-keyring0, gir1.2-gnomekeyring-1.0<br></br> Section: devel<br></br> Priority: optional<br></br> Homepage: <a class="ag hb" href="http://www.atom.io" rel="noopener ugc nofollow" target="_blank">http://www.atom.io</a><br></br> Description: Atom text editor from GitHub<br></br> Atom is a hackable text editor for the 21st century, developed by GitHub.<br></br> .<br></br> Atom is open source and built on top of atom-shell.<br></br> .<br></br> Atom is designed to be customizable, but also usable without needing to edit a config file.<br></br> . [10/6658]<br></br> Atom is modern, approachable, and hackable to the core.</span><span id="7fe4" class="qx pz io rh b gz rq rn m ro rp">*** Contents:<br></br>drwxr-xr-x root/root 0 2018-04-27 21:52 ./<br></br>drwxr-xr-x root/root 0 2018-04-27 21:52 ./opt/<br></br>drwxr-xr-x root/root 0 2018-04-27 21:52 ./opt/atom/<br></br>-rwxr-xr-x root/root 86630492 2018-04-27 21:52 ./opt/atom/atom-linux64.tar.xz<br></br>drwxr-xr-x root/root 0 2018-04-27 21:52 ./usr/<br></br>drwxr-xr-x root/root 0 2018-04-27 21:52 ./usr/share/<br></br>drwxr-xr-x root/root 0 2018-04-27 21:52 ./usr/share/icons/<br></br>drwxr-xr-x root/root 0 2018-04-27 21:52 ./usr/share/icons/hicolor/<br></br>drwxr-xr-x root/root 0 2018-04-27 21:52 ./usr/share/icons/hicolor/16x16/<br></br>drwxr-xr-x root/root 0 2018-04-27 21:52 ./usr/share/icons/hicolor/16x16/apps/<br></br>-rw-r--r-- root/root 1095 2018-04-27 21:52 ./usr/share/icons/hicolor/16x16/apps/atom.png<br></br>drwxr-xr-x root/root 0 2018-04-27 21:52 ./usr/share/icons/hicolor/48x48/<br></br>drwxr-xr-x root/root 0 2018-04-27 21:52 ./usr/share/icons/hicolor/48x48/apps/<br></br>-rw-r--r-- root/root 4713 2018-04-27 21:52 ./usr/share/icons/hicolor/48x48/apps/atom.png<br></br>drwxr-xr-x root/root 0 2018-04-27 21:52 ./usr/share/icons/hicolor/256x256/<br></br>drwxr-xr-x root/root 0 2018-04-27 21:52 ./usr/share/icons/hicolor/256x256/apps/<br></br>-rw-r--r-- root/root 42856 2018-04-27 21:52 ./usr/share/icons/hicolor/256x256/apps/atom.png<br></br>drwxr-xr-x root/root 0 2018-04-27 21:52 ./usr/share/icons/hicolor/32x32/<br></br>drwxr-xr-x root/root 0 2018-04-27 21:52 ./usr/share/icons/hicolor/32x32/apps/<br></br>-rw-r--r-- root/root 2778 2018-04-27 21:52 ./usr/share/icons/hicolor/32x32/apps/atom.png<br></br>drwxr-xr-x root/root 0 2018-04-27 21:52 ./usr/share/icons/hicolor/128x128/<br></br>drwxr-xr-x root/root 0 2018-04-27 21:52 ./usr/share/icons/hicolor/128x128/apps/<br></br>-rw-r--r-- root/root 16496 2018-04-27 21:52 ./usr/share/icons/hicolor/128x128/apps/atom.png<br></br>drwxr-xr-x root/root 0 2018-04-27 21:52 ./usr/share/doc/<br></br>drwxr-xr-x root/root 0 2018-04-27 21:52 ./usr/share/doc/atom/<br></br>-rw-r--r-- root/root 1423 2016-05-11 21:01 ./usr/share/doc/atom/copyright<br></br>-rw-r--r-- root/root 4394 2018-04-27 21:38 ./usr/share/doc/atom/changelog.Debian.gz<br></br>drwxr-xr-x root/root 0 2018-04-27 21:52 ./usr/share/applications/<br></br>-rw-r--r-- root/root 246 2018-04-27 21:52 ./usr/share/applications/atom.desktop<br></br>drwxr-xr-x root/root 0 2018-04-27 21:52 ./usr/bin/<br></br>-rwxr-xr-x root/root 3416 2018-04-27 21:52 ./usr/bin/atom</span>

たぶんインストール処理中にtar.xzを展開しているのでしょう。それはちょっと複雑過ぎます。という訳で、PPAでdebパッケージを公開するのは難しいと判断して、Snapを試してみることにしました。

Snapとは:

Snaps are containerised software packages that are simple to create and install. They auto-update and are safe to run. And because they bundle their dependencies, they work on all major Linux systems without modification.

和訳すると: Snapはコンテナ化したソフトウェアパッケージのことで、シンプルな手順で作成・インストールできます。自動アップデートに対応していて、安全に実行できます。すべての依存モジュールを同梱しているので、すべてのメジャーなLinuxディストロで動作します。

素晴らしいですね。その上、Snapは既存の.debパッケージから生成出来ます。その手順について、Electronチームによる公式のドキュメントもあります:

そしてこちらがInkdropのsnapcraftリポジトリです:

Snapcraftは自動で.debパッケージをサーバからダウンロードして、ビルドしてくれます。さらに継続ビルドサービスも無料で提供しているので、自分のマシンで必ずしもビルドする必要がありません。便利ですね。こちらが、Snapコンテナ内で動作するInkdropです:

Yay! 遠回りしましたが、やっとこさ自動更新機能がLinuxでも提供することが出来ました。ちなみにsnapdは1日に4回更新のチェックをしてくれます。

Inkdropのクイックスタートガイド(英語)をアップデートしておきました。

snapd をまだインストールしていない場合は、こちらから事前に行ってください。以下のようにしてアプリをインストールできます:

<span id="b5d5" class="qx pz io rh b gz rm rn m ro rp">sudo snap install inkdrop</span><span id="1895" class="qx pz io rh b gz rq rn m ro rp"># Allow the app to access to your keyring<br></br>sudo snap connect inkdrop:password-manager-service</span>

手動でアップデートする場合は、以下のコマンドを実行します:

<span id="fc0b" class="qx pz io rh b gz rm rn m ro rp">sudo snap refresh inkdrop</span>

でも基本的には必要ありません。snapd が1日に4回更新を自動でチェックしてくれるからです。

注意点ですが、Snapでインストールした場合、ipmコマンドはinkdrop.ipm となります。ipmを使ってプラグインをインストールするにはこちらのドキュメントをご参照ください。

もし何か問題があればお気軽にフォーラムまでご連絡ください。それでは、自動更新機能をお楽しみください!

Read more

Claude Codeをtmuxのポップアップウィンドウで継続的に走らせる方法

Claude Codeをtmuxのポップアップウィンドウで継続的に走らせる方法

💡本記事は英語ブログの日本語訳です。 どうも、TAKUYAです。 AIコーディングでは専らClaude Codeを使っています。最初はtmuxでターミナルの右側にペインを分割して使っていたのですが、幅が狭すぎてメッセージやdiffがまともに表示できず、使いづらかったです。 <Prefix>+zでペインを最大化すればいいのですが、毎回やるのは面倒でした。 そこで、ポップアップウィンドウでClaude Codeを起動するようにしました。キーバインドを押せばセッションが開き、閉じてもバックグラウンドで動き続けるので、すぐに再開できます。 この記事では、それを実現するためのtmuxの設定方法を紹介します。 動画で見る(英語): ポップアップウィンドウはサブプロセスを維持できない tmuxのdisplay-popupコマンドを使うとポップアップウィンドウを表示でき、ちょっとしたツールにすぐアクセスするのに便利です。 僕はlazygitでgitの状態をサッと確認するのに使っています: bind -r g display-popup -d '#{pane_current_path}'

By Takuya Matsuyama
Keychron K2 HEを無刻印化する手順

Keychron K2 HEを無刻印化する手順

どうもTAKUYAです。KeychronさんにK2 HEをお願いしたら音速で送ってくれたので、無刻印化してみました。どうやったのか過程をシェアします。 Unboxing 上はKeychron Q1です。これは3年間ぐらい使ってきました。キーキャップが若干くたびれていますね。でも問題なく今まで使えていました。そろそろ飽きてきたので新しいキーボードを試したいと思い、前から気になっていたK2 HEを試すことにしました(写真下)。 Amazon | 【国内正規品】Keychron K2 HE ラピッドトリガー ワイヤレス カスタムキーボード、ホールエフェクトGateronダブルレール・マグネットスイッチ、2.4GHz・Bluetooth無線対応、QMKプログラム可能、アルミ+ウッドフレーム、USレイアウト、RGBライト、Mac Windows Linux対応 (ブラック) | Keychron | パソコン用キーボード 通販【国内正規品】Keychron K2 HE ラピッドトリガー ワイヤレス カスタムキーボード、ホールエフェクトGateronダブルレール・マグネットスイッチ、

By Takuya Matsuyama
ノート駆動AIコーディング術の提案

ノート駆動AIコーディング術の提案

どうもTAKUYAです。みなさんはAIエージェントを普段のコーディングで活用されていますか。ちょっと面白いワークフローを思いついたのでシェアします。それは、ノート駆動のエージェンティック・コーディング・ワークフローです。最近Claude Codeのプランモードを使っていたら、ターミナル内で生成されたプランを読むのが辛かったんです。それで、じゃあMarkdownノートアプリであるInkdropをプランの保存先バックエンドとして使えば解決するんじゃないかと思って、 試してみました。こちらがそのデモです(英語): こちらがClaude Codeの設定ファイル群です: GitHub - inkdropapp/note-driven-agentic-coding-workflow at devas.lifeComplete Claude Code configuration collection - agents, skills, hooks, commands, rules, MCPs. Battle-tested configs from an Anthropic hackathon w

By Takuya Matsuyama
2025年個人開発活動の振り返り

2025年個人開発活動の振り返り

どうもTAKUYAです。もう1月も半ばに差し掛かっているけど、2025年の自分の活動の振り返りをしたい。去年を一言で言うなら、本厄を満喫した年だった。 厄年とは、人生の節目にあたって、体調不良や災難が起こりやすいと経験的に言われる年齢のこと。数え年で42歳、確かにもう若さに任せた事は出来ないなと痛感した年だった。(ところであなたの国ではこのような年はありますか?) 夏に体調を崩して2~3ヶ月動けなくなった 暖かくなり花粉が飛び出した頃に、持病のアトピーが悪化しだして、まともに生活出来なくなってしまった。酷さで言うと、2019年に脱ステした時と同じぐらい。 脱ステに無事成功したから、この地獄は二度と味わうことはないだろうと高を括っていたが、まさか7年後にまた味わうとは思わなかった。当時の独身時代と違い、妻も子供もいる中で、周りに多大な迷惑をかける事となった。夏の子供との思い出が全く無い。悲しい。 現在はQoLもほとんど元の状態まで復活できた。写真を撮って症状の変化を記録したので、機会があればシェアしたい。食事療法など色々試したが、結局歩くのが一番自分に効いた。それ以来、一日一万歩

By Takuya Matsuyama