2024/06/02

LinuxでNeovimでもSwiftを書きたい!

転職して約一ヶ月。予想に反してiOSアプリ開発案件にアサインされたため業務時間中は常にMacを使っている。皆さんもよくご存知の通り、iOSアプリの開発にはMacが必須だからだ。リモートワークでは貸与されたMacを使うし、実機検証用のiPhoneも傍らに置いてある。半分Appleアンチで知られる僕も今やすっかり林檎林檎している。じきに取り囲まれて林檎シロップ漬けと化すことだろう。

さて、しかし業務時間が終わればもはやこっちのものである。退勤報告をぶち上げた直後に即ディスプレイの入力を切り替えればそこは僕の庭だ。Macの方でもなんとかタイル型WMの挙動を再現できないかとyabaiを入れてみたり、なるべくCommandキーを使わないショートカット体系を目指してみたりと試行錯誤しているものの、どうしたって自分の手に馴染んだ環境は他と代えがたい。

一方、個人的な課題もある。iOSアプリ開発案件ではSwiftのコーディングが不可欠だが、僕はその経験がろくすっぽない。かといって一から手取り足取りご指導願いますなんて言えるキャリアでもなし、自力でキャッチアップする前提でチームが組まれているのは明らかだ。定時内で不足ならプライベートでもSwiftの勉強にリソースを割かなければならない。幸い、残業は現状まったくない。

となると、やはり問題なのはMacだ。Swiftをやらなければどうせ他の言語を勉強するので勉強自体は構わないがせめて開発環境にはこだわりたい。ゲームプログラミングや業務用アプリケーション開発ならともかく、Swiftは意外にちゃんとしたオープンソースの言語でもある。構文を学ぶためにちょこちょこ動かすくらいならLinux環境でもやってやれないことはないのではないか。

もちろんエディタはNeovimでなければならない。Linux環境と同じくらいエディタがNeovimなのも重要だ。Xcodeにも割とこなれたVimキーバインドが存在しているが物足りない。IntelliJ IDEAほど高機能でもない。そんなわけで、僕はNeovimでSwiftを勉強する気持ちを固めたのだった。

言語環境の手動インストール

Neovimで言語サーバを扱う場合、通常はmason-lspconfig.nvimなどで簡単に導入できるようにするのが一般的だが、悲しいかなSwiftの言語サーバSourceKit-LSPは対応リストに含まれていない。したがってマニュアル的な形式で言語サーバを認識させる必要がある。

Arch Linuxの場合はAURからswift-binパッケージをインストールすると簡単に導入できる。Ubuntuなど他のディストリビューションは公式サイトから手動でファイルを取得する。これを下記の要領で展開して任意の場所に配置していく。

1$ tar xzf swiftの圧縮ファイル.tar.gz
2$ sudo mv swiftの展開フォルダ /usr/local/bin/swift  #PATHが通っていれば場所はどこでも構わない
3$ swift --version  #事前にシェルを再起動されたし

導入が済んだら試しにFizzBuzzを逐次実行してみよう。以下のコードをコピペしてfizzbuzz.swiftなどのファイル名で保存した後、シェルからswift fizzbuzz.swiftで実行できる。

 1for i in 1...100 {
 2if i % 3 == 0 && i % 5 == 0 {
 3    print("FizzBuzz")
 4} else if i % 3 == 0 {
 5    print("Fizz")
 6} else if i % 5 == 0 {
 7    print("Buzz")
 8} else {
 9    print(i)
10 }
11}

PATHが通っていれば言語サーバもsourcekit-lspコマンドで起動可能になっているはずだ。ここまでうまくやれていれば話を次の段階に進められる。

Neovimの設定および動作確認

あえて本記事を読んでどうにかしたいと思っている人はすでにある程度の設定を組んでいると思われる。そこで細かい部分は割愛してざっくりコード例を載せる。この例ではnvim-lspconfigの導入を要する。他にvim-lspやcoc.nvimを用いた例もあり、公式ドキュメントで詳細を確認できる。

1require("lspconfig").sourcekit.setup({
2    cmd = { "/usr/bin/sourcekit-lsp" },
3    filetypes = { "swift" },
4    on_attach = on_attach,
5    capabilities = capabilities,
6})

2行目のファイルパスは環境ごとに各自変更する。Arch LinuxのAURから導入した人は上記のファイルパスになる。設定後、Neovimを再起動してswiftファイルを開いた際に補完が効いていれば成功である。なお、swiftの言語サーバはルートディレクトリに.gitなどがなければ自動起動しない。

総評

これでLinux、NeovimでもSwiftの学習に最低限文化的な環境が得られた。ちなみに教本は技術評論社のSwift実践入門を読んでいる。正直よく分からなかったオプショナル型の理解が一層深まっ太郎になった。

別に勉強するだけならPlaygroundのVimキーバインドで我慢すればいいんじゃないかって? まあそれは確かにそうだ。

©2011 Rikuoh Tsujitani | Fediverse | Keyoxide | RSS | 小説