IPFS Core API で IPFS 組み込みアプリケーションを作成

IPFS Core API とは

IPFS Core API とは IPFS 公式ブログでアナウンスされていました、IPFS を組み込んだアプリケーションを作成する際に使われるインターフェースになります。

まだ全ての実装が完了している訳ではありませんが、ipfs コマンドで実装されていた大体の機能が PR 上に展開されているので、fetch して利用することは可能です。

それまでの IPFS を組み込んだアプリケーションでは go-ipfs のコマンド周りの Golang コードを import する形で利用していました。
しかし、公式側で想定していた利用ではなかったため、推奨されていた使い方ではありませんでした。

(例: OpenBazaar の場合)
openbazaar-go/add.go at master · OpenBazaar/openbazaar-go · GitHub

試しに API サーバーに IPFS を組み込んだアプリケーションを作りました。
GitHub - camelmasa/ipfs-coreapi-sample-app: IPFS CoreAPI Sample app

以下のコードで IPFS CoreAPI を実行しています。
ipfs-coreapi-sample-app/command.go at master · camelmasa/ipfs-coreapi-sample-app · GitHub

注意する点

組み込み IPFS アプリケーションを作成する際に注意が必要なのはファイルディスクリプタの設定です。
標準の IPFS を起動する際に "Successfully raised file descriptor limit to xxxx" と表示されますが、これは内部でファイルディスクリプタの値が変更されたことを表しています。

なので、組み込みをする場合は同じ様にコード内で処理する必要がありますが、既に IPFS でコードが用意されてるので、それをコールするだけです。

import "github.com/ipfs/go-ipfs/cmd/ipfs/util"

main() {
  util.ManageFdLimit()
}

リファレンス