最近、Swiftでサーバーサイドのコードを書いています。SlackのBotができるところまできました。 Swiftでボットを作るためのフレームワークをオープンソース化しました | まだSwiftは3.0の開発中で常に変化していますが、3月、4月の変化に比べると、5月になって変化が緩やかになってきた気がします。言語の面での充実っぷりは著しいものの、肝心のライブラリはまだまだ発展途上です。4月にOSXでオープンソースSwiftの開発環境-まずビルドまで | の記事を書いて、それ以降あまり変わっていませんが、個人的には、Xcodeのプロジェクトファイルの生成機能が安定して動くようになってきたので、ずいぶん快適に開発できるようになってきたと感じます。
サーバーのプログラムを書くとなると、データベースへのアクセスが必要になります。MySQLアクセスのライブラリは良いものがあって、novi/mysql-swift: A type safe MySQL client for Swift SQLから綺麗にSwiftのクラスにデータをマッピングまでしてくれます。ただ、マッピングの法則に関しては、プログラムで指定してあげる必要があります。
項目が多いと大変ですので、これを自動化するプログラムを作成しました。
データベースのログイン情報と、対象のテーブル、書き出し先のフォルダのパスを指定して実行すると、Swiftファイルをテーブル1つごとに1つ作成してくれます。NULL許容、またAutoIncrementを見てデータクラスを作成するので、プログラムは各クラスのプロパティの属性に従ってプログラムを書き進めることができます。
作成されたswiftファイルをプロジェクトに組み込むと、以下のような簡単なプログラムで、項目を全て取得することができます。
このアプローチは、まだテーブルのリンクなどに対応していない、シンプルなORMマッパーですが、結構便利に使えるものとなっています。
特にテーブル構造が変わった時に、このプログラムを再度実行して、テーブル用のクラスを再生成すると、SwiftのStructのプロパティがなくなったり、リネームされたりするので、ビルドエラーが発生して、修正をしやすくなる利点があります。この辺りが、コンパイルするプログラム言語の利点かなと思います。
ぜひ使っていただいて、機能改善のアイディアなどいただければと思います。
詳しくは、tomohisa/SimpleMySQLClassGenerator: This is simple command line program to generate data class for MySQL Table using novi/mysql-swift のリンクをご覧ください。