現代において、Webシステムは私たちの生活の多くを支えています。
「ITエンジニア」という職業が一般的なものとなり、とても多くの人が何らかの形でWebシステムの企画・開発・運用などに携わるようになりました。本書を手に取った皆さんの中には、勉強のために簡単なWebアプリケーションを作ってみた方、ソフトウェアエンジニアとして仕事を始め、先輩の指導の元でシステム開発の一端を担うようになって間もない方も多いかもしれません。
自分が書いたプログラムが形になり、インターネットを通じて多くの人が使えるようになるのは、この上なく楽しくワクワクする経験です。しかしその一方で、こんな悩みに1つでも思いあたる方はいませんか?
- プログラミング言語やフレームワークの使い方を学んではみたが、理解が腹落ちしていない
- 自分が作ったWebシステムが、実際にどのような仕組みで動いているのかわからない。
- Webシステムが期待どおりに動かなかったり、性能が出なかったりしたとき、どう対処すれば良いのかわからない
- 新たなシステムを作ろうとする際、多種多様な技術からどうやって適切な技術を選べば良いのかわからない
これらの悩みは、最初は誰もが抱えるものです。
もちろん、筆者も同じでしたし、新たなことを学ぶ時はいまでもそうです。時間とともに経験を重ねれば自ずと本質を理解し、悩みは解決するかもしれません。先輩エンジニアにも「とにかく色々な経験をしろ!」と言われている人も多いかもしれませんね。しかし、近年の技術や環境の変化が、独学で本質を学ぶまでの道のりを一層難しいものにしていると、筆者は感じています。詳しくは第1章で述べますが、その理由を3つ挙げましょう。
- 要件の多様さと複雑さ
- 技術的選択肢の増加と進化
- クラウドサービスの普及による要求スキルの広がり
要件の多様さと複雑さ
要件の多様さと複雑さは、Webシステムの普及の裏返しです。多種多様な目的で、多くのことを実現する必要が生じた結果、型どおりの作り方だけでは実現できないシステムが増えてきました。要件に合わせて利用する技術を選定し、適切に組み合わせていくことが今まで以上に求められています。
技術的選択肢の増加と進化
ITの世界では多くの技術が次々と現れ、中には廃れるものもあります。これらの中から、要件や状況に合わせて適切なものを選び取っていくのは至難の業です。また時代が下るにつれ、技術も積み重なるので高度になります。しかし、要件の変化に対応したり、不具合や性能などの問題を解決したりするためには、これらの中身の理解も求められます。
クラウドサービスの普及による要求スキルの広がり
クラウドサービスの普及は、可能性の広がりとともにエンジニアの職域の垣根を取り払いました。これまでは資金力のある組織でしか利用できなかったような高度な技術が、クラウドサービスによって手軽に利用できるようになりました。サーバやネットワークの構成も柔軟に選べるようになった反面、これらとソフトウェアの設計を一体的に考える重要性も高まり、エンジニアに幅広い知識が求められる場面も増えています。
このような背景をふまえ、本書ではこれからWebシステムにかかわるキャリアを積んでいく皆さんが、普段利用している技術の裏側や本質をしっかりと理解し、その応用や問題解決につなげられるための理解を積み上げられるよう、技術のつながりを重視して解説していきます。また本書では、一見古そうだったり、深そうだったりする話にも焦点を当てていきます。表面的な技術の解説だけでなく、「なぜそのような実現方法になったのか」や「今後私たちが新たな技術を生み出していくときに、参考とすべき過去の思想」といったことに触れることも重要であるからです。技術の進歩に追いつきしっかりと使いこなし、自分で新たな技術を切り開いていくには、1つ1つを着実に理解する以外にないと、筆者はこれまでの現場経験から痛感しています。また「百聞は一見に如かず」です。文章から知識を得るだけでなく、実際に手を動かすことで理解が深まったり新たな疑問につながったりします。本書では、皆さんのPC上で簡単に試せる実験を数多く取り入れています。また第6章以降では、1つのサンプルアプリケーションを改善しながら作っていくことで、技術の変遷を実感しながらWebアプリケーションの仕組みを理解していきます。解説を読みながら、触って試して理解できるよう、Web上でもサンプルアプリケーションを公開しています。
Webシステム開発に初めて触れる人にとっても、半ば読み物として前提知識がなくとも読み進められるよう、基本的な知識も脚注や付録にて、できるかぎり解説するようにしました。しかし、少しでも自分でWebアプリケーションを作ってみて、いろいろな疑問を感じてから本書を繰り返し読んでいただくと、より効果的だと思います。ぜひ本書が常に皆さんの手元にあり、末永く学習の手助けとなるような「座右の1冊」となれば、筆者にとってはこの上ない喜びです。
小森裕介(こもりゆうすけ)
キャディ株式会社 勤務。ソフトウェアエンジニアとして,製造業の変革を目指す自社サービスの開発・運用に携わる。
2000年,東京工業大学(現・東京科学大学)工学部情報工学科卒業。進学と就職で悩み「研究よりも実際に役に立つソフトウェアを創りたい」という思いから,就職を決意。独立系システム開発会社を経て,2009年にウルシステムズ株式会社へ入社。エンタープライズ系を中心としたシステム開発,技術支援,プロジェクトマネジメント支援を幅広くこなしつつ,新人技術研修の企画・講師を担当し,若手育成にも携わる。
2019年,「世界中の人々に使ってもらえるプロダクトを開発する」という夢を追いかけて,LINE株式会社(現・LINEヤフー株式会社)に入社,金融系サービスの新規開発に携わった後,2022年より現職。
好きな言語はJavaとGoとシェルスクリプト。好きなエディタはNeovimとsed。
趣味は自宅サーバの運用と,下道ドライブ。家族を引き連れ,行き当たりばったりで日本の原風景を楽しみながら,ときには2,000km以上も走る。
いつかは下道で日本一周するのが夢。
著書
『なぜ,あなたはJavaでオブジェクト指向開発ができないのか』(2004年,技術評論社)
『プロになるためのWeb技術入門 —なぜ,あなたはWebシステムを開発できないのか』(2010年,技術評論社)
SoftwareDesign誌 連載『Google Cloudで実践するSREプラクティス』監修・執筆(2023年,技術評論社) ほか,雑誌寄稿多数。