最近、アプリの Swift ネットワーキングコードを Vapor サーバーで再利用するために抽出する必要がありました。Mac では問題なくビルドできたのですが、サーバーにデプロイすると複数のエラーが発生しました。そこで、サーバーで一般的に使われている OS である Linux とのコード互換性を簡単にテストする方法を探すことにしました。幸い、Ole Begemann が 2020 年に書いたこの記事を見つけ、Docker を一から学ぶ手間が省けました。
Ole の記事では、たった 1 つのコマンドで Swift コードを Linux 環境で実行する簡単なアプローチが紹介されています。必要なのは Mac に無料の Docker Desktop App をインストールすることだけです。ただ、コマンドがかなり長くて覚えにくかったので、さらにシンプルにしたいと考えました。最終的に、swift-linux とだけ覚えれば済むアプローチにたどり着きました。以下がその方法です:
Docker コマンドの簡略化
まず、Ole のコマンドをさらに短くしました:
docker run --rm -it -v "$(pwd):/src" -w "/src" swiftコマンドの説明(興味のある方向け):
docker run:コンテナを作成して起動するコマンドです。--rm:コンテナが終了したときに自動的に削除します。-it:ターミナルを接続してインタラクティブモードでコンテナを実行します。-v "$(pwd):/src":現在のディレクトリ($(pwd))をコンテナ内の/srcにマウントし、Swift ファイルにアクセスできるようにします。-w "/src":コンテナ内の作業ディレクトリを/srcに設定します。swift:使用する Swift の Docker イメージを指定します。
なお、セキュリティ上の理由から Ole のコマンドにあった --privileged オプションは削除しました。Swift パッケージのテストにはほとんどの場合不要です。
便利なエイリアスの追加
このコマンドをもっと簡単に実行できるように、~/.zshrc ファイルにエイリアスを追加しました(touch ~/.zshrc などで作成できます)。これは macOS で現在デフォルトのシェルである Zsh の設定ファイルです。手順は以下の通りです:
ターミナルを開く
~/.zshrcファイルを編集する macOS にプリインストールされているテキストエディタの TextEdit を使えます。 単にopen ~/.zshrcを実行してください。エイリアスを追加する ファイルの末尾までスクロールし、以下の行を追加します:
alias swift-linux='docker run --rm -it -v "$(pwd):/src" -w "/src" swift'ファイルを保存して閉じる
変更を適用する 以下のコマンドで設定ファイルを再読み込みします:
source ~/.zshrc
Linux 環境でのコマンド実行
エイリアスの設定が完了したので、Mac から直接 Swift コードを Linux 環境でテストできるようになりました。ターミナルでプロジェクトディレクトリに移動し、以下を実行するだけです:
swift-linux☕ 初回実行時は Linux コンテナのダウンロードに少し時間がかかります。
このコマンドで Linux 環境に入り、必要に応じて swift build や swift test を実行できます。Mac に戻るには exit と入力するだけです。これにより、サーバーにデプロイする前にすべてが期待通りに動作するかをすばやく確認し、エラーを事前にキャッチできます。
覚えるのは swift-linux だけです!

