Webアプリの基礎の基礎
今日は、Cloud9を使って実際にソースコードを書いていろいろ動かしてみようと思ったけど、どっかの記事のサンプルをそのまま使って「うぇーい!でぎだー!!」とやってもあまり意味がないと気づいたので、
まずはwebアプリケーションの構成を理解して、1つづつEC2環境に構築していくことにする。
今まで1からWebアプリを作ったことが無く、Apacheやtomcatがどういう役割を果たしているのかなど、よく理解せず仕事していたので。
Webアプリケーションの構成
一般的に、Webアプリは以下のサーバで構成されている。
- Webサーバ
- アプリケーションサーバ(APサーバ)
- データベースサーバ(DBサーバ)
それぞれについて概要を調べた後、ミドルウェアをEC2環境にインストールしていくことにする。(既にインストールされているものもありそうだけど。)
Webサーバ
httpリクエストを受けて、httpレスポンスを返すサーバ。Webブラウザと直接やりとりするのはこのサーバ。
静的ページの場合はそのままレスポンスを返すが、動的処理が必要な場合は、APサーバに処理を依頼する。
代表的なミドルウェアは、
などがある。
使ったことがあるのはApacheだけ。
APサーバ
Webサーバから依頼された動的処理を行い、結果を返す。
必要に応じて、データベースサーバとのやりとりを行う。
APサーバはWebサーバと同一マシン上に構成することも多く、ミドルウェア自体を指すこともある。
Webサーバとの連携方式は特に標準化されているわけではなく、ミドルウェアによって異なる。
Apache⇔TomcatであればAJP (Apache JServ Protocol)というプロトコルで、
TomcatがApache向けに提供しているmod_jkと呼ばれるモジュールをApacheに組み込むことで連携を実現している。
動作させるプログラムごとの、代表的なミドルウェア(Javaの場合はWebコンテナとも呼ばれる)は以下。
Ruby on Railsは触ったことないので、APサーバも全然知らない。。
DBサーバ
DBMS(DataBase Management System)が動作するサーバ。
APサーバとの連携はSQLによって行われる。
EC2で環境構築
の構成で環境構築を試みる。
Apacheインストール
Cloud9でワーウスペース作成時に指定したOSは「Amazon Linux」。
いくつかツールがあらかじめ「/opt/aws」にインストールされているとのこと。
とりあえず「/opt/aws」を見てみる。
test2:~/environment $ ls -l /opt/aws/ total 32 drwxr-xr-x 3 root root 4096 Nov 16 2018 amitools drwxr-xr-x 8 root root 4096 Jun 26 14:50 apitools drwxr-xr-x 2 root root 20480 Jun 26 14:50 bin -rw-r--r-- 1 root root 83 Apr 2 2015 credential-file-path.template
amitoolsとapitoolsはどういう住み分けなんだ?よくわからんので、コマンドでApacheがインストールされているか調べる。
・・・rpmコマンドか。こういうのは、しばらく触ってないと忘れてしまう。
test2:~/environment $ rpm -qa httpd* httpd24-2.4.39-1.87.amzn1.x86_64 httpd24-tools-2.4.39-1.87.amzn1.x86_64 test2:~/environment $ httpd -v Server version: Apache/2.4.39 (Amazon) Server built: Apr 5 2019 18:55:17
インストールされてるみたい。起動してみる。
test2:~/environment $ service httpd status httpd is stopped test2:~/environment $ service httpd start Starting httpd: (13)Permission denied: AH00058: Error retrieving pid file /var/run/httpd/httpd.pid AH00059: Remove it before continuing if it is corrupted. [FAILED]
起動に失敗した。。sudoコマンドでスーパーユーザとして実行。
test2:~/environment $ sudo service httpd start Starting httpd: [ OK ] test2:~/environment $ sudo service httpd status httpd (pid 6406) is running...
できた。できたが、、これはヤバイ気配がする。そもそもコイツは一体どこにいるんだ??
whichコマンドを使えばコマンドの場所は調べられる。
test2:~/environment $ which httpd /usr/sbin/httpd
デフォルトで使えるコマンドはここにあるみたいだけど、apacheはどこにいるの?
・・・うーん。Cloud9とかAmazon Linuxとか、いい勉強にはなると思うんだけど、Webアプリの基礎を学習したいという本筋になかなか辿り着けなさそう。
やっぱり、まずはローカルPCで構築したほうがよいものか。。
今日はもうすっかり遅くなってしまったし、風呂入って寝よう。
明日は代休なので「 ディスクアップは打ち続けるといつかはプラスになるのか? 」の検証1回目をやろうと思ってたんだけど、そんな場合じゃないかも。まあ、明日考えよう。。
今日の出来事
伊藤園の麦茶についてる応募マークを集めてもらえる「接触冷感!ひんやり抱っこクッション」が欲しくて、ちょっと前から麦茶ばかり飲んでる。
↑コレ
650mlで1ポイント、2lで2ポイントもらえる。
コツコツ集めて、ついに・・・
24ポイントと・・・
24ポイント分の650mlをネットで購入。これで48ポイント!
これの応募マークをひたすら切り取るのは結構しんどそう・・・。いつやろうか。。
映画「劇場版 仮面ライダージオウ Over Quartzer」感想
今日は仮面ライダージオウの夏映画、「劇場版 仮面ライダージオウ Over Quartzer」を観てきたので、感想を書いてみる。
ネタバレあり。(一応書いておく。)
ちなみに、リュウソウジャーの方は、特に印象に残らなかったかな。
(リュウソウジャー自体、あんまりハマってない。ロボはギミック的に好きなんだけど。)
平成仮面ライダー夏映画の総括
まさに、夏映画の総括といった印象を受けた。
どちらかという悪い意味での夏映画感を感じたんだけど、今回の映画はけっこう好き。
今までの夏映画って「1回観れば十分かな」って思うものが多いんだけど、今回の映画は「また観たい」って思った。
個人的な印象だけど、
平成ライダーは作品ごとに試行錯誤しながら作られていった「完成度は高くないけど勢いの強い作品」で、今までの夏映画はこの「完成度の低さ」が強く出ていたけど、今回はそこを総括したというか。
「夏映画ってこんな感じだったよな~」とコンテンツを追いかけてきた記憶を振り返るのにちょうど良い作品って感じで、アラはあるけど嫌いじゃないというか。
気になったのは、キックの痕が「平成」になるくだりが悪ノリが過ぎる感じで好みじゃなかったくらいな。
ネット配信作品や舞台、果ては漫画からもライダーが登場したのは良く考えると意味不明だけど、テンション上がった。
(余談だけど鎧武にもう少し早くハマっていれば、舞台絶対見に行ったのにな~。)
いなくなったはずのゲイツやツクヨミ、死んだはずのウォズが復活してて、「本に書いてないから分からない」と説明放棄したのも、「そういう映画だ」という気持ちで見ていたので、全然気にならなかった。
むしろへんな理屈を付けられるより断然好み。
また「未来は誰にも分からない」みたいなラストシーンは、強引だけどグッときた。
クソ映画認定する人も大勢いるんだろうなと思うけど、総じて自分は大変気に入った。Blu-ray買おうと思う。
きっと、クォーツァーとか常磐SOUGOとか、テレビ本編では一切触れられないんだろうな~。
そんなところも、夏映画的。(まだわからんけど)
平成ジェネレーションズFOEVERと比較して
どっちも、脚本的には「考察し出すと辻褄が合わないけど勢い(エモさ?)で押し切る」作品だけど、
平成ジェネレーションズFOEVERは、
メッセージ性が強くて丁寧に描かれた印象で、見終わったあと「平成仮面ライダー追いかけてきて良かったな」としみじみ感じる作品。
対してOver Quartzerは、
メッセージ性は低いけどテンション高く「このめちゃくちゃな感じが平成仮面ライダーだ!」と強引に突きつけられる作品。悪い部分も思い出して、それも含めて感慨深くなるというか。
何度も見返したくなるのは平ジェネの方だけど、平ジェネを見たあとはOver Quartzerも見たくなる、そんな対になってる作品だと思う。
ちなみに、平成ジェネレーションズFOEVERで一番好きなシーンは、電王(モモタロス)が後ろ姿で「いいじゃんいいじゃんすげーじゃん」て言いながら逃げまどう民衆の中、歩くところ。
仮面ライダードライブ編として
観る前は、「ドライブ編」という側面が強い作品なのかと思ってたけど、そんなことはなかった。
てっきり仮面ライダーブレンと繋げて、ドライブのオリジナルキャストがサプライズ登場するものかと思ってたので、ぜんぜん出る気配なくて逆に驚いた。
でも、映画全体のバランスを考えると、ドライブ成分はこのバランスで良かったと思う。
ドライブライドウォッチの継承も、ベルトさんからなら文句は無いし。(継承から逆算してベルトさんを登場させた感は気になったけど)
ちょっと残念と言えば、せっかく本人から継承したマッハライドウォッチ(DX仕様の!)が使われなかったことかな。
ライドウォッチの継承に関しては、やっぱりWだけが残念だな。風麺のおっさんって。。
その他、気になったこと
- なんでベルトさんが普通に出てきてるの?
- 剛はライドウォッチ継承後に何で記憶が戻って変身できたの?
- 結局、ライドウォッチ継承後に記憶が有ったり無くなったりの違いは何なの?
- なんで影武者立てる必要があったの?
- 未来のオーマジオウは何だったの?
こういうところが気になる人は、あまり楽しめない映画かも。自分は後半あたりで、気にならなくなった。
仮面ライダーゼロワン
最後にガッツリアクションがあって驚いた。
印象的だったのは、フォームチェンジのときに顔が機械的になるところ。
エグゼイドやビルドの流れで、どうしても飛電或人は実はヒューマギアではないか?と疑ってしまう。
なにはともあれ、放送開始が楽しみ。
さて、昨日今日と勉強をお休みしてしまったので、明日は勉強せねば。
EC2とかE2Cとか
今日はAmazon EC2(Amazon Elastic Compute Cloud)について調べることにする。
というのも、EC2をE2Cと勘違いしており、
Cloud9 E2C
でググったら、このブログが上の方にきてしまった。
このクソ記事である。
世の中のエンジニアの方々の目に触れてしまったが最後、二度とエンジニアとして生きてはゆけまい。
てかE2Cて!飛行機か!!
ja.wikipedia.org
この記事は戒めとして直さずにおいておくとして、今後二度とこのような悲劇が起こらないよう、EC2の正しい知識を身につけておく。
EC2とは
Amazonが提供している仮想サーバ構築サービスのこと。
サーバはインスタンスという単位で構築できる。
インスタンスとは
OSを載せた仮想サーバのこと。仮想マシン。
例えば、アプリケーションサーバとデータベースサーバなど、複数サーバが必要な場合は、インスタンスを2つ作成して対応できる。
Cloud9 ワークスペースのEnvironment type
- Create a new instance for environment (EC2)
- Connect and run in remote server (SSH)
の二択だったが、これは
ということのようだ。
EC2インスタンスでJavaを動かしてみる。
先日ノリだけで作ったCloud9のワークスペースだが、どうやらEC2インスタンスが作成されていたようだ。
Cloud9を開くとコンソールが表示されており、ここでいろいろ確認してみる。
cat /etc/system-release
Amazon Linux AMI release 2018.03
java -version
java version "1.7.0_211"
OpenJDK Runtime Environment (amzn-2.6.17.1.79.amzn1-x86_64 u211-b02)
OpenJDK 64-Bit Server VM (build 24.211-b02, mixed mode)
なるほど。OpenJDKなるものがいるようだ。
JavaでHelloWorldしてみよう。
public class hello{ public static void main(String[] args){ System.out.println("Hello World!"); } }
このhello.javaを作成して、Cloud9のメニューから実行。
動くじゃん!
この一歩は小さいが、私にとっては偉大な一歩である。
つづく。
今日の出来事
夕食には、このめちゃめちゃウマイ冷凍食品の皿うどんを食べる。
APIとはなんであろうか
Cloud9は週末に
面談は来週になったのと、実際にコードを書くのは腰をすえてやったほうが良さそうという理由で、今日予定していた「Cloud9でJavaを動かしてみる」は延期。
今日は「サーバ側の機能をAPI化する」という別の案件について予備知識をつけるために、APIについて調べておく。
APIとは
Application Programming Interfaceの略。
ソフトウェアやアプリケーションなどの一部を外部に向けて公開することにより、第三者が開発したソフトウェアと機能を共有できるようにしてくれるもの。
WebAPIとAPIは違うもの?
WebAPIとは、HTTP/HTTPSベースで実現するAPI。プログラムから使用することを前提としたWebサービスとの窓口。
WebAPIはAPIの一部だが、単にAPIというと「アプリケーションとプラットフォーム(OSやミドルウェア)を繋ぐインタフェース」という意味合いになる(こともある)。
Web APIの代表的な実装方式として「REST」と「SOAP」がある。
REST
GETまたはPOSTでリクエストを送信し、レスポンスをXMLデータで受け取る形式。
以下の設計原則がある。
- ステートレスである
- セッションなどの状態管理を行わない
- インターフェースが統一されている
- HTTPメソッド(GET,POST,PUT,DELETE)はCRUD操作と対応付けられる
- 処理結果をHTTPステータスコードで返す
- アドレス指定可能なURIで公開する
- URIはリソースを示すため、名詞のみで構成する
SOAP
XMLで記述された「SOAPメッセージ」でデータをやりとりする。 (リクエスト、レスポンス共にXML)
WSDLというWebサービスインタフェース記述言語でSOAPメッセージの構造を定義する。
認可と認証
認可とは、権限をあたえること。
認証とは、認証は誰であるかを確認すること。
認可を実現するプロトコルにOAuth、認証を実現するプロトコルにOpenID Connectがある。
OAuth
Webサービス間で「アクセス権限の認可」を行うためのプロトコル。
WebAPIの使用可否はアクセストークンによって制御され、このアクセストークンの要求と応答の部分を標準化するもの。
OpenID Connect
OAuth 2.0の拡張仕様。
アクセストークンに加えIDトークンも発行する。
最近の棚
特に書くような出来事もなく、「さらばFFⅦ④」を書くのも面倒なので、現在の棚を写しておく。
Cloud9を使ってみる
Cloud9とは
Cloud環境で利用できるIDE。
※ちなみにIDEはIntegrated Development Environmentの略。こんなのすぐ忘れちゃう。
面談に向けて、○○(今回はkotlin)勉強中です!って言えるように、いろいろ試せる環境を用意しておきたくCloud9を使ってみようと思いました。
早速使ってみよう。果たして本当に簡単なのか。
1.まずはAWSアカウントを作成
AWS製品だったのか。知らなかった。
ちなみにCloud9は英語で「意気揚々」を意味する言葉のようで、過去にCloud7や8があったわけではないみたい。
早速アカウントを作成して、AWS Coud9の使用を今すぐ開始しよう!と思ったら・・・
認証情報が正しくありません。もう一度試してください。
と表示されて、ログインできない。
アカウント作成完了後にメールの一つも来ないんだが、もしかしてメールアドレス入力をミスったのかも。。
2.AWSアカウントをさらに作成
結局、メールアドレスを間違ってたらもうどうにもできなそうだったので、またアカウントを作成しました。
次は、登録完了後にちゃんとメールが届いた!問題なさそう。
3.Cloud9の利用を開始
無事にログインできたら、「AWS マネジメントコンソール」というページに遷移した。
「cloud9」で検索して、いざ Create environment!! (どういう意味だろ)
4.IAMユーザを作成
早速開始できると思ったら、「ルートアカウントではなくIAMユーザを使用しろ」と警告された。。
IAMとは、『AWS リソースへのアクセスを安全にコンソールするためのウェブサービス』とのこと。
私は・・・
AWS アカウントを使用するのは私だけあるが、私は学生ではない !! ドンッ!
という主張のもと、個人ユーザのセットアップルートに入った。
5. IAM 管理者のユーザーおよびグループの作成
AdministratorAccessのポリシーを設定したグループを作成し、このグループにユーザを作成。
アクセスの種類は「AWS マネジメントコンソールへのアクセス」とした。
・・・AWSのヘルプめっちゃ分かりづらいよ。。飯休憩挟んじゃったよ!
6.IAMアカウントで今度こそCloud9の利用を開始
ようやく利用開始できそう。
まずはワークスペースを作成。
- Environment settingsはE2Cを選択
- Instance typeはmicroを選択
- PlatformはAmazon Linuxを選択
- Cost-saving settingはAfter 30 minutesを選択
ベストプラクティスがどうとかいう警告(説明?)が出たが、 構わず Create environment!!
7.ワークスペース完成!
ブラウザ上にeclipseのようなUIが表示された。
よし!開発するぞ!と意気込み、
<h1>Hallo World</h1>
という内容のindex.htmlを作成、Previewで表示したところで、今日はオシマイ。
明日はJavaを動かしてみようと思う。時間かかりそう。。
最近の出来事
仮面ライダージオウの夏映画に向けて、仮面ライダードライブを視聴中。
現在、40話までと映画(サプライズフューチャー)を視聴済み。
今のところ、歴代ライダーの中ではまずまずといったところ。面白くなくはないんだけど、夢中になる感じではないというか。
話のブツ切り感というか、伏線なく急に話が変わる(キャラの性格も変わる)のも、イマイチハマれない原因かと。
しかしフィギュアーツは凄く良い!いろいろ欲しくなっちゃうんだけど、タイプトライドロンなどの値段が高騰しててヤバイ。
今月はもうお金使えないので、映画の後さらに高騰しないことを祈るのみ。
Springについて触りだけでも
今日は定時後に面談の練習を行い、帰りにスーパーをハシゴしたため、既に20時過ぎ。
少し遅くなってしまった(十分早いんだけど) 。
ご飯が炊けるまでの時間で、軽くSpringについて調べてみよう。
Spring Frameworkとは
DI(依存性注入)
例えば「Aクラスをコンパイルするには、Bクラスが完成している必要がある」という状態は「クラスAはクラスBに依存している」と表現できる。 この依存関係をクラスAの外で定義し、外からクラスAのインスタンスに注入する という仕組みのこと。
AOP(アスペクト指向プログラミング)
オブジェクト指向ではうまく分離できない特徴(クラス間を横断 (cross-cutting) するような機能)を「アスペクト」とみなし、アスペクト記述言語をもちいて分離して記述することでプログラムに柔軟性をもたせようとする試み。(wikipediaより)
う~ん、分かるようでよう分からん。これは後日ちゃんと調べよう。
Spring Bootとは
Spring Frameworkの改良版みたいなもの。Spring Frameworkに比べて、
という特徴があるみたい。
お腹が限界なので、続きはまた今度。
今日の出来事
今日発売の「ミニプラ 騎士竜合体シリーズ03キシリュウネプチューン」を探し、スーパーをハシゴ。
家から反対方向の西友で無事確保。
いや~今年のミニプラは楽しい!
去年の戦隊ロボは遊んでてもあんまり楽しくなかった。
今年はいろいろ「俺合体」できるし、ジョイントのおかげで余剰パーツを無くせるのがよい。
今回の03はシールが少ないみたいだし、明日早く帰れたら一気に作りたいところ。
ブログと選挙とマークダウン
明日は選挙
今までは何の選挙なのかよく分からずに、その日に各政党のマニフェストを見てよさそうなところに入れていたけど、明日の選挙は一体何なのか?調べておこうと思う。
そういえば恋と選挙とチョコレートってアニメがあったな~と思って調べたら、7年も前で驚いた。
で、チョコレートっぽい語呂の言葉を探してたら(?)マークダウンに行き着いたので、今日からマークダウン(Markdown)で書いてみる。
選挙の種類
そもそも、明日の選挙では何を選ぶの?ていうのもよくわかっていない。 案内の紙を見ると、どうやら明日は参議院議員選挙で
- 東京都選出
- 比例代表選出
の2つの投票があるみたい。
選挙の種類は、大きく4つに分けられる。
public String senkyo(String type) { return "明日の選挙は" + type; }
_人人人人人人人人人人人_
> 突然のソースコード <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄
↑これを書くために、Markdawnでは"\"がエスケープであることを知った。
Markdownの書き方調べてたらけっこう時間が経ってしまったので、今日はここまで。
結局、選挙についてはほとんどわからんかった。。
今日の出来事
コードギアス復活のルルーシュに登場したKMF(ナイトメアフレーム)のロボット魂が届いた。
復活のルルーシュは、R2の終わり方を考えると間違いなく蛇足なんだけど、『蛇足を承知の上で作ったファンサービス作品』として最高だったと思う。素直に面白かったし、ラストはグッときた。
(仮面ライダークローズもそうであってほしかった。。)
ブルーレイいつ出るんだろう?もう一度見たい。
早く開けたいけど、まずは飾る場所を確保しなくては・・・
フルパワーグリッドマンをしまうか。
あと、ダイソーでタブレットスタンドを購入。
これでアレクサに天気を訊くのが捗る!