素晴らしく大げさ・詐欺っぽいタイトルだなと思われても仕方ないのですが、少し前に授業内でシステム開発をしました。そこからわかったことを今更ですが、書いてみたいと思います。
はじめに
これは私が授業で作成した会議室予約システムに関して述べています。開発環境やら動作環境は以下に述べていますが、クオリティに関しては突っ込まないでください。(コードはそのうち公開できればします)
- Java 1.8.0_92(当時の最新版)
- MySQL Ver 14.14 Distrib 5.7.13(homebrewで導入した)
- Apache Tomcat 8.0.35
JSPで作成したので色々と大変でした。特に、JSPの情報が少なかったため辛かったです。この辺りも今後執筆できれば良いなと思っております。
ウォーターフォール型の大変さを身にしみて感じた
システム開発をするにあたって、開発モデルとして ウォーターフォール型 が指定されたので、当初はウォーターフォール型で進めていました。最初は特に問題なく進んで…おらず、途中からテスト駆動開発やアジャイル型開発に近い開発方法を用いて開発をしておりました。
ウォーターフォール型でやって気がついたのは「完成が見えていないプロジェクトでウォーターフォール型を回した時に後で追加すると面倒なことになる」ことが分かりました。詰みそうなので途中から切り替えたのですが、設計→実装→テストを繰り返すことによって、回しやすい上、具体的なイメージが湧いてくるため、モチベーションを維持したまま開発することが可能でした。
SQL構文で死にかけた
私達が構築したシステムは時間単位で管理するようなシステムであったので、時間を管理するのが非常にめんどくさかったです。日付単位で構築すればカレンダーなり日付なりでOKかダメかというのがわかりやすく構築できるのではないかなと思っております。
本来であれば、何らかの条件式を書いてfor文などで処理してしまおうかなーと思ったのですが、流石に死にかけました。ある日別の教員に話していたら「そんな面倒な処理、SQLでやるもんでしょ」ということで、以下のような感じになりました。
select * from [table] where (((start between '9:30' and '12:30') OR (end between '9:30' and '12:30')) OR (start <= '9:30' AND end >= '12:30')) AND room='Sourth' AND date='2016-09-28';
簡単に説明すると、where文ではその時間がどうなのか、部屋の指定、日付の指定をしています。もう少しスマートに出来たかもしれませんが、わからなかったので動くことを最優先したらこうなりました。
開発環境と動作環境に関して
開発環境と動作環境に関してですが、正直なところ、開発環境は開発するのに使用したツールやらソフトウェアのバージョン、動作環境はプログラムが動く環境だと思ていました。
しかし、開発環境は開発するために使用したJavaやらのバージョンらしく、動作環境で良いのではないかと思いました。
開発環境を調べて思いましたが、単純に「開発環境は?」というところだともうよくわからないです。まぁ、その後に「使用言語」とか言っているので少しはわかりますが、それじゃわからないですよというお話です。
開発環境とは、システムやソフトウェアを開発するための機材やソフトウェアなどの組み合わせのこと。文脈により、施設や設備、通信回線、開発手法やマネジメント手法、労働条件などまで含めた、開発に携わる人員を取り巻く総体としての環境を指す場合もある。
また、特に、ソフトウェア開発において、対象のソフトウェアを開発するためのアプリケーションソフトやツール、ライブラリなどの組み合わせのこと。プログラミングやデバッグに必要なツールを一つのソフトウェアにまとめたもののことを「統合開発環境」(Integrated Development Environment)という。
開発環境とは|development environment - 意味/定義 : IT用語辞典より引用
本音をいうと、この定義で進めると機材やらまで含め始めるとあれなので、
- Mac OS X 10.11
- Coda 2
- Java 1.8.0_92
- Apache Tomcat 8.0.35
- MySQL 5.7.3
という感じだとは思うのですけど、よくわからないです。Codaとか言ったら違うやらいわれたので、今もかなりヘコんでます。
さいごに
おそらく、ごまプロ(@gomasiyo)からは甘え、あまい、非実用的とか言われそうで怖いのですが、全体を見渡した結果わかったところがあったと思います。
しかし、他にもコミュニケーションを取ることや、プロトタイプが大事な理由が痛いほどわかりました。プロトタイプがあることで、完成目標もわかりますし、モチベーションも維持することが可能です。甘く考えていました。私達はウェブデザインと同じようなレベルでしか作っていなかったため、必要な機能を洗い出して図を書くべきだと思わされました。(いわゆる紙だけ、動きとかページはざっくり作ってても良かったのかもしれない)
今回、システム開発をして感じたことに関しては今後活かしていきたいと思いますし、改めて振り返ると発見というか、学ぶことができたのではないかなーと思っております。
ちなみに、この記事は8月上旬に公開されるよていだった記事です。