emonkakツイートシュキーンの開発とドメイン駆動設計についてこんにちわちわ。Underbar.phpの記事ぶりになりました@emonkakです。本エントリでは、以前のエントリでお伝えした勤怠管理アプリケーションのシュキーンの開発について述べたいと思います。シュキーンとはシュキーンはAndroidで動作する勤怠管理アプリケーションです。打刻はNFCタグをAndroid端末にかざすことで行います。勤怠データはAndroid端末からサーバーに送信されるので、ネットワーク環境さえあればどこからでも確認することがきます。開発のスタート社内向けに使っていたシュキーンを一般公開に向けて改修をするということで、開発はスタートしました。メンバーは私を含む2名で進み、リリース直前に増員があり現在は3名体制になりました。今回リリースされたものは以前のバージョンからほとんど1から書き直すことになりました。社内で以前使われていたものは、弊社以外の様々な組織で使うことが考慮されておらず、仕様書も存在しない状況だったので一度仕様から見直してメンバー間で共有する必要がありました。そこで、ドメイン駆動設計を導入をして全面的に設計を見直すことを決めました。ドメイン駆動設計とはソフトウェアが解決する問題領域(ドメイン)からソフトウェアを設計する手法です。開発者は設計に際して、クラスをどう分割するか、DBにどうやってデータを格納するのかなど、実装の詳細から設計しがちです。その結果、実装都合で気付かないうちに仕様を歪めてしまったり、コードから仕様が読み取れなくなってしまうことが度々あります。ドメイン駆動設計ではドメインの専門家と開発者が共有する「ユビキタス言語」を元にシステムの概念を表わす「ドメインモデル」を構築して実装に落とし込んでいきます。ドメインモデルは純粋にシステムの概念を表すもので、DBなどの技術基盤とは分離されています。ドメイン駆動設計においては、このドメインモデルの構築こそが一番重要になってきます。勤怠管理におけるドメインモデル我々は勤怠管理におけるドメインモデルとは何か、どうあるべきか議論することにしました。様々な勤怠管理システムの資料を集め、実際に勤怠を管理している事務の方にヒアリングして、少しづつドメインに関する洞察を深めていきました。して構築していったドメインモデルを元に実装を進めながら、実装作業中に気付いた点があればドメインモデルも修正していきました。以下は実際のAndroidクライアントにおけるパッケージです。Applicationレイヤー、Domainレイヤー、Infrastructureレイヤー、UIレイヤーの4レイヤーで構成されています。Domainレイヤーの機能の多くはサーバー側で持っているのでクライアントはシンプルな実装になっています。開発はgithubのプライベートリポジトリを用いて進めました。ブランチは本番環境とリリースバイナリ用のmasterブランチ、社内環境とデバッグバイナリ用のdevelopブランチの2段構成で、社内テストが済むとdevelopがmasterにmergeされるといった流れになります。requestするといったことをしています。Jenkinsによる自動化プロジェクト開始時点でJenkinsを導入して可能な限りリリースサイクルを自動化して開発を進めました。自動化の対象はAndroidクライアント、PHPサーバープログラム、公式サイトの3つです。markdown)とデブロイこれらはすべてJenkinsによって実行され結果はSkypeに通知されます。APIで叩くことができるHaskell製のskype-rest-api-serverを使用してます。この通知はサーバーリポジトリのmasterブランチにpushされたので、Dockerで構築されたステージング環境に自動的にデプロイされたことを示しています。Dockerのコンテナはジョブの実行時間を短くするために、デプロイごとに破棄せずに使い回しています。これは本番環境の構成(Dockerを使っていない)と合わせる意味もあります。手動でジョブを走らせればコンテナの再生成をすることもできるようにしています。requestします。レビューが済んで実際にmasterにmergeされると、ステージング環境に自動的にデプロイされます。ステージング環境での確認が済んだら本番環境へのデプロイをJenkins上から行います。Pluginでデプロイ先がパラメータ化されているので、これをlocalhostから本番サーバーのものに変えて手動で実行しています。デプロイはfabricを使ってソースをrsyncしています。installが必要となるので、予めデプロイサーバー上でビルドを完了させて、本番サーバーではビルドを実行しないようにしています。PHP製のデプロイツールとしてRocketeerがありますが、rsyncでコピーするといったことができなかったので採用を見送りました。まとめシュキーンの開発にあたってドメイン駆動設計とJenkinsによるビルドやデプロイの自動化を導入しました。これによって、開発効率と品質の向上に繋げることができました。リリースプロセスも可能な限り自動化して素早くサービスを改善できる体制を整えることができました。今後のアップデートとしてWeb画面のリニューアルなど、様々なサービスの改善を予定していますのでシュキーンを今後ともよろしくお願いします。かざしてシュキーンをリリースしました「タガヤス」にてILの日常業務についてお話しました。»ブログ記事検索このブログについてこのブログは、札幌市・仙台市の「株式会社インフィニットループ」が運営する技術ブログです。開催されます!【1月25日放送】テレビ北海道(TVh)「けいナビ~応援!どさんこ経済~」に取材いただきました!【中途採用向け】1月21日(火)札幌本社で会社説明会を開催いたします!あけましておめでとうございます!2020年もよろしくお願いいたします。