ペンギン村 Tech Blog

技術をこよなく愛するエンジニア集団が在住するペンギン村から、世界へ役立つ(かもしれない)技術情報を発信する技術系ブログです。某アラレちゃんが済む村とは一切関係ありません。んちゃ!

SwiftPrettyPrint 1.2.0 をリリースしました。

SwiftPrettyPrint の 1.2.0 をリリースしました。

github.com

今回のリリースには、ターミナル統合(ANSIカラー)とマイナーな Bugfix が含まれています。

そもそも SwiftPrettyPrint って何ぞや、という方は前回の記事をご参考いただければ幸いです。 blog.penginmura.tech

ターミナル統合(ANSIカラー)

今回のバージョンから iOS Simulator または macOS で実行されている場合に、以下のファイルにコンソールと同様の内容が自動的に出力されるようになりました。

  • /tmp/SwiftPrettyPrint/output.log
  • /tmp/SwiftPrettyPrint/output-colored.log

これにより tail -Fgrep といった外部コマンドで、出力内容のウォッチ・フィルタリングなどが行えるようになりました。

$ tail -F /tmp/SwiftPrettyPrint/output-colored.log

また output-colored.log は ANSIカラーコードによる色付けがされているため、ターミナル上で色付けされてキレイな出力で確認できます。

f:id:yu_dotnet2004:20210210175043p:plain
iTerm2 (Solarized Dark)

複雑なオブジェクトの内容を確認したい時などに役立つかと思います。大きなディスプレイで開発されている方は、ターミナルウィンドウを常時開いておいて tail -F で監視させておくと便利かと思います(サーバサイドの開発に慣れている方はおなじみでしょうか?)。

Xcode Plugin は衰退しました

ここからはだいたい余談です。

以前・・・といってもかなり前のことになりますが、Xcode で非公式プラグイン(≠ Source Editor Extension)をそのまま利用できる時代がありました。非公式プラグインはかなり自由な拡張が実現できていたため、数多くの便利なプラグインが生まれ、Alcatrazといったプラグインのためのパッケージマネージャまで存在していました。

しかし、Xcode 8 から公式のプラグインの仕組みとして Source Editor Extension が用意されたり、macOS 自体のセキュリティが向上したため、非公式プラグインを利用するためには SIP を無効にしたり、Xcode の署名を外したりと、特別なことをしなければ利用できなくなりました。

さて、なぜ急にこのような昔話をしたかというと、非公式プラグインのなかにあった XcodeColors の話をするためです。このプラグインは Xcode のコンソール出力を色付けすることができました。

コンソール出力が色付けできるというのは非常に便利なものでしたが、前述のとおり最新の Xcode では簡単に利用することは出来なくなりました(OSS自体もサポートしていないので動くかも定かではありません)。

たったひとつの冴えたやり方?

SwiftPrettyPrint はリリース当初から、Swift 標準のシンタックスに似せた形で pretty-print するという思想を持っていました。これは言い換えると、Swift のコードシンタックスハイライトと非常に相性が良い(はず)ということです。

そのため色付けしたいという思惑はリリース当初からあったのですが、Xcode のコンソール出力を色付けするアプローチが簡単に利用できない以上、別の方法を模索する必要がありました。

そこで、ログ出力という形でファイルに出力する際に、ANSIカラーコードを埋め込むという方法で色付けを実現することにしました。

なお、ANSIカラーコードについては以下の OSS を利用させていただきました。 github.com

SwiftPrettyPrint は Xcode extension の夢を見るか?

これでリリース当初から実現したかった色付け機能について、間接的にサポートすることができました。

しかしながら、出力内容を気軽に確認するのには Xcode のコンソール出力がやはり便利であり、コンソール出力で色付けできればと思う気持ちを無くすことはできません。

Xcode extension は Xcode 8 で発表されてから進化しておらず、未だにエディタのちょっとした拡張程度のことしかできません。Xcode extension が進化し、より自由なプラグインを開発者が自由に作れる時代は来るのでしょうか。

2.0.0 への扉

こうやって地味にバージョンアップを続けている SwiftPrettyPrint ですが、おかげさまで先日スター数が 100 を超えました。

f:id:yu_dotnet2004:20210212131029p:plain

少なくとも役に立つと感じてくださっている開発者がいるということだと思うので、嬉しい限りです。

そんな SwiftPrettyPrint ですが、API を刷新した 2.0.0 の開発も予定しています。SwiftPrettyPrint は当初思いつきでガチャガチャっと実装してリリースしてしまったので、現状はお世辞にも洗練された API ではありません。機能としては大分やりたいことを実現できた感じなので、このあたりで全面的に API を見直すのもよいかと感じている次第です。

おわりに

余談ばかりの文章だった気がしますが、SwiftPrettyPrint 1.2.0 に含まれるターミナル統合について解説しました。

この機能が開発時におけるデバッグなどに役立てば幸いです。

ペンギン村 OSS チーム一同(文: tobi462

P.S.

今回の記事の小見出しは全て SF小説のタイトル から持ってきているのですが、すべて分かった人は居たでしょうか?

・ワ・ 「”人類は衰退しました”はさいごまでよんだです?」