🐘

Mastodon公式iOSアプリをローカルで動かす

2023/10/26に公開

アプリエンジニアの神田です。
今回はMastodonの公式iOSアプリをローカル環境で動かす方法についてお伝えします。
想定している読者は、アプリ作りの初心者から中級者の方です。
具体的には、本格的なiOSアプリをこれからつくっていきたいので、お手本となる既存のアプリをじっくり動かしてみたいなという状況を想定しています。またiOSアプリである都合上開発環境はMacを使うものとします。

さて、一緒に頑張っていきましょう。

そもそもMastodon(マストドン)とは

ご存知の方は読み飛ばして下さい。一言で言うとXみたいなサービスです。なんだかTwitterっぽいやつなんだな、テキストや画像の投稿ができたりするんだな、くらいに思ってくれたら、今回は大丈夫です。とりあえずオープンソースらしいぞとここでは抑えておきましょう。

Googleの生成AIによるMastodonの説明

マストドン(Mastodon)は、インターネット上で最大の分散型ソーシャルネットワークです。2016年にドイツのプログラマーであるオイゲン・ロホコ氏が立ち上げました。
マストドンは、Twitterとよく似た仕様で、ユーザーがプロフィールを作成し、メッセージを投稿し、フォローしているユーザーの投稿がタイムラインに投稿されます。マストドンは、世界中に存在する数多くのサーバが連合して生み出されるソーシャル・ネットワークです。この「数多くのサーバの連合」の状態を指して、マストドンは非(脱)中央集権(Decentralized)なサービスであるなどといわれます。

Mastodonアプリとは

Mastodonは、Xと同じでPCからも投稿ができます。また同様にスマートフォンからもできます。そういう構図でMastodonにもアプリがあるのです。

Mastodonはオープンソースということもあり、公式のアプリのほか「Ice Cubes for Mastodon」などのアプリが制作・ストア公開されています。

App Storeでmastodonと検索した様子。多数のアプリが見つかる

Mastodon for iPhone and iPad とは

今回ビルドして、ローカルで動かすアプリのことです。

Mastodon for iPhone and iPad

2021年2月8日[1]から開発が始まり、2023年10月現在も活発に開発されています。
コミット数がおよそ6,000で、1.9k stars、あるので実務で使うアプリと遜色ない規模感かと思います。

使われているアーキテクチャはMVVMで、一部のviewではSwiftUIが使われています。[2]ちなみにSiriショートカットをサポートしているそうですよ。詳細は脚注をご覧ください。

実際にどんなアプリかまず触ってみたい方は、ダウンロードしてみてください。どのサーバーでアカウントを作っていただいても構いません。なんでもいいから作りたいよと言う方向けに、Mastodon Japan Serverを挙げます。筆者はPCのブラウザで作成しました。

Mastodon Japan Server

細かな登録手順やログイン方法については割愛します。

リポジトリをクローンしよう

こちらからお願いします。
https://github.com/mastodon/mastodon-ios

Sourcetree、Fork, GitHub CLIなどお好みでどうぞ。gitの扱い方については本稿では扱わないので、各自がんばってください。また、zipファイルでダウンロードすることもできます。

Xcode14以降をインストールしよう

App Storeからダウンロードすることもできますが、今回はdeveloper appleからダウンロードしてみましょう。

https://developer.apple.com/jp/
アクセスしたら、右上のキーワード検索でXcode15と検索します。
ダウンロードボタンを押したあと、「Xcode 15ベータ版(英語)」を選択します。
アカウント情報の入力の後、More Downloadsというページが出てきたら成功です。

Xcode 15.0.1など、Xcode14以上のバージョンを選択しましょう。特にこだわりがなければ、最新のものでOKです。

セットアップに必要なドキュメントを探そう

さて、ここからがすこし難しくなります。一緒に頑張りましょう。
何のためのツールか、という説明は基本的に省いています。ただ。気になった方は検索してみてください。検索してよくわからなくてもあまり気にせず、慣れの経験値を高められたからいいかの精神でいきましょう。

https://github.com/mastodon/mastodon-ios
mastodon-iosのページに戻り、README.mdを読みます。読み飛ばしたくなってしまうかもしれませんが、重要なヒントが詰まっているので大事にしていきましょう。

今回はGetting Startedのthe setup guideが、ビルドという目的では特に大事です。

the setup guide

下記はthe setup guideを初心者の方向けに補足したものです。

CocoaPodsの環境構築

Homebrewのインストール

  • Install Homebrew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

上記スクリプトをターミナルで実行します。パスワードを聞かれたらMacのログインでつかっているパスワードを入力してください。

  • brewがインストール成功したか確認
brew -v  

Homebrew 4.1.17等がでてきたら成功です。

rbenvのインストール

  • 下記をターミナルで実行します
brew install rbenv

rubyのチェック

  • 下記をターミナルで実行します
which ruby

/usr/bin/rubyと出てくるはずです。

.zshrcに追記

  • 下記をターミナルで実行します
cd ~
vi .zshrc

iキーを押して編集モードにして、下記のコードを加えてください。
加えたら、:wqで保存終了してください。

export PATH="$HOME/.rbenv/bin:$PATH" 
eval "$(rbenv init - zsh)"

下記のコードで.zshrcを再読み込みしてください。

$ source ~/.zshrc

rubyの確認

  • 下記をターミナルで実行します
which ruby

/Users/XXXXX/.rbenv/shims/rubyと出てくるはずです。

  • 下記をターミナルで実行します
rbenv install
  • 最後に下記のコードをターミナルで実行します
bundle install

Bootstrapの環境構築

ターミナルでmastodon-iosが入っているディレクトリに移動します。

例 cd /Users/XXXXX/git/mastodon-ios
  • 下記をターミナルで実行します
bundle install
bundle exec pod clean
  • 下記をターミナルで実行します
bundle exec arkana -e ./env/.env
  • 下記をターミナルで実行します
bundle exec pod clean
  • 下記をターミナルで実行します
bundle exec pod install --repo-update

最後にプロジェクトを開いてみましょう。

open Mastodon.xcworkspace

SwiftPackageManagerというライブラリをいい感じにダウンロードしてくれるやつが動いているのが見えると思います。ダウンロードが終わったら、ビルドが可能になります。お好みの端末を選択して、実行したら、マストドンが開くはずです。

冒頭で作成したアカウントでログインに成功すれば、App Sroreでダウンロードしたアプリと遜色なく使えるはずです。

次のステップはプロジェクトファイルをひたすら読む、動かすこと

最初のうちはどのコードがどの画面を制御しているのかわからないと思います。安心してください。すぐに慣れます。Xcodeの使い方やMVVMというアーキテクチャ自体の理解が必要になるのですが、これは今後の記事で扱う予定です。

自分なりの変更を保存したりするために、リポジトリのフォークなども今後扱っていきます。ともあれ、これでアプリ開発の勉強の用意ができました。ちょっと触ってみて下さい。

おわりに

実務では人の書いたコード、初心者からするととても巨大で複雑なプロダクトを扱うことになります。mastodon-iosがその練習になればという企画で記事を書きました。

引き続きよろしくお願いします。

脚注
  1. https://blog.joinmastodon.org/2021/02/developing-an-official-ios-app-for-mastodon/ ↩︎

  2. https://github.com/mastodon/mastodon-ios/blob/develop/Documentation/How-it-works.md ↩︎

Mobile App Hub

Discussion