今回のワークショップの前提説明
- 下記機能を持つJava製Webアプリケーション
- Twitter風APIからツイート(投稿)を取得して表示
- Twitter風APIに文章をツイート(投稿)
- こういう感じの図を用意する
- Twitter「風」API
- APIについては後ほど説明
【口頭での補足】
- TwitterAPIつかうの手間なので用意しました
- Java
- SpringBoot
- Java製フレームワーク
- アプリケーションに共通する基本的なプログラム構造や機能セットを実装したプログラム
- アプリケーションの骨組み。土台。
- 複雑なシステムを一から作るのは大変なので、フレームワークを利用して開発する。
- 様々なフレームワークが存在する
【口頭での補足】
- 今日使ったのはSpringBootだけど、他にもいろいろあるよ
- SpringBootは新しくて手軽なので、今回はこれを採用しました
Webアプリケーションの基礎知識について説明
- サーバーは提供する側。クライアントは提供される側。
- Webアプリの世界にかぎらず、サーバー/クライアントという言葉はつかう
- 今日説明するのは、あくまでWebアプリでのサーバーとクライアント
- サーバーに必要な情報を要求し、返却された情報を利用する側
- WebアプリでいうところのクライアントはWebブラウザ
- Webブラウザはサーバーから返却された情報を解析、表示する
- HTML
- CSS
- JavaScript
【口頭での補足】
- スマホアプリならスマホ端末がクライアント
- JavaScriptとJavaは違うものなんやで
- クライアントの要求に応じて、情報を返却する側
- サーバー機能を提供するサーバーソフトを使用
- サーバーソフトは色々な種類がある
- Apache、nginxなどなど色々種類がある
- Javaの場合、TomcatやJetty
- サーバーソフトは色々な種類がある
- サーバーマシンは特殊なPCがいるわけではない
- 自前でサーバー立てるとめっちゃたいへんやし今はあんまりみんなやらない
【口頭での補足】
- 今日はSpringBootに内蔵されているTomcatを使用している
- みんなのPCもサーバーにできるんやで
- 時間がありそうなら、発表に使っているマシンでサーバー立ち上げて、そこにみんなでアクセスしてもらう
- 今はそこそこ安くで借りれる
- 今日のsimple-api-sampleはHerokuってとこに置いていて、ただで使ってる。
- 時間がありそうなら、発表に使っているマシンでサーバー立ち上げて、そこにみんなでアクセスしてもらう
- サーバー・クライアント間の通信の取り決め。
- リクエスト・レスポンス
- HTTPメソッド
- リクエスト
- クライアントの要求
- レスポンス
- リクエストを元にサーバーで生成し返却される情報
- ステータスコード
- 図を作る
【口頭での補足】
- ターミナルでcurl叩いて、リクエストとレスポンスをみせる
- GET
- リソースの取得
- POST
- リソースの作成など
- 他にもPUT、DELETEなどのメソッドが存在する(全8種)
- なぜメソッドが複数あるのか
- GETとPOSTの使い分け
- URIとは
- Uniform Resorce Identifier
- リソースを統一的に識別するID
- URLはURIの一種
- Uniform Resorce Location
- リソースの場所(Location)を示すためのURIがURL
【口頭での補足】
- URL=URIと思ってもらって構わない
Webアプリの基礎を説明したうえで、今日のプロジェクトがどうなっているか
- HelloWorld! + 名前表示
- ソースを見ながらざっと、処理の流れを説明
- 複雑なレスポンス(HTML)をJavaプログラム中に記載すると読みづらい・・・
- HTMLファイルにプログラム(Java)コードを埋め込むように記述できる機能を提供してくれる
- 今日使ったのはThymeleaf
- APIとは
- Application Programming Interface
- 外部のプログラムから機能を利用するためのインターフェイス
- 特にRESTという設計思想に基づいたAPIは「REST API」と呼ばれる
【口頭での補足】
- RESTは今風。なうい。
- curlでAPIを叩いてみせる?
- TwitterのAPI仕様書を開いてみせてもよさそう
処理の流れをわかってもらったところで、もう少しコア(Java)な部分を説明
- 参考URL:http://docs.oracle.com/javase/jp/8/docs/index.html
- 簡略化した図を作る?
- ソースコードをコンピュータが実行できる機械語のプログラムに変換すること
- Javaの場合、JVMが実行できるバイトコードのクラス・ファイルに変換される
- Javaのコンパイラはjavac
- javacコマンドでコンパイルできる
- IDEのrunボタンを押した時に裏で実行してくれている
- コンパイルするにはJDKが必要
【口頭での補足】
- javacコマンド実行してみせる
- Java SE Development Kit
- Java用開発者向けキット
- アプリケーションを開発するのに必要または便利なコンパイラやデバッガなどの開発ツール (http://docs.oracle.com/javase/jp/8/docs/technotes/guides/index.html#jre-jdk)
- 一般的に、こういう開発者向けキットを「SDK (Software Development Kit)」という
- Java仮想マシン
- Javaで開発されたアプリケーションはJVM上で実行される
- 各OS版のJVMが存在する。OS差異はJVMにより吸収されるため、同じプログラムで各OS上で実行することができる。
- Write once, run anywhere
【口頭での補足】
- 今回、runすると内蔵のTomcatが起動して、その上でコンパイルされたプログラムが動く
- 今日はローカルで動かしてもらっている
- これを公開したいなら、どっかのサーバーにデプロイすればいい
- Webを支える技術