エンジニアを志したきっかけについて

こんにちは!kossyです!

今回は、私がなぜ現在の仕事を辞めようと思ったのか、
なぜエンジニアを目指そうと思ったのか、について書いてみようかと思います。


















1. はじめに

はじめまして。kossyと申します。

社会人3年目、25歳です。

お前誰やねんって方がたくさんいらっしゃると思うので、

簡単に自己紹介を書いてみます!



1993年生まれ

3歳まで埼玉で過ごす

4歳の時に父の仕事の都合で東京へ

小学校、中学校は 地元の公立学校に通学

中学時代は硬式野球クラブチームに所属
2番手投手としてブルペンを温める

高校は下位都立高へ(陸上部に所属)
2年の夏からは部長に

大学は都内のFラン私立校(文系)へ進学
ひたすら居酒屋でのアルバイトに勤しみながら、
国際協力系の活動をしようと試みたり
FWでフィリピンのマニラに2週間行ったり
TOEIC200点台から1年自分のペースで勉強して650点まで伸ばしたり
社会勉強のためと思い株式取引をしたり
してました。

卒業後は金融機関で営業。テレアポ、飛び込み営業でメンタル削られながら働く

現在の仕事に未来を感じなくなり、
今はwebエンジニアを目指し
TECH::EXPERTでプログラミング学習中



プログラミング経験はドットインストールでHTMLを修了させた程度。 大学3年次に選択授業でecripseでJavaを書く授業を取るも全く意味がわからず単位を落とす。 ドットインストールの学習はwindowsのメモ帳でコード書いてました。



自己紹介は以上です!





2. なぜ今の会社を辞めるのか

いろいろ考えましたが、
一番大きい理由は、
社外に出ても通用するスキルが身につかない ことです。


日本人の平均寿命は年々伸び続け、世界の平均寿命ランキングでは常に上位に位置しています。


最近こんなニュースも出てました。 http://www.tokyo-np.co.jp/article/politics/list/201809/CK2018090602000155.htmlwww.tokyo-np.co.jp

増え続ける社会保障費を現行制度では支えきれないため、
生産年齢とされる64歳を過ぎても働いてもらおうと、
法改正も視野に入れているようです。



25歳の今、これからあと45年は働くことになると考えると、
現在の仕事を一生続けていていいのか
といった疑問がふつふつと湧いていました。


現在の業務内容は、主としてマニュアルに基づいたルーティンワークが大半を占めており、
社外で通用するようなわかりやすいスキルは到底身につかない、と感じていました。

また、現在勤めている会社では、内勤は部署を跨いだ異動をすることが度々あり、
よほど上長から気に入られない限り、
同じ部署で長く仕事をすることはありません。

一つの部署に長く勤め上げて、専門性を身につけ、
その能力が社外でも使えるのが私の理想でしたが、
今の会社で理想を実現させるには難しいのではないか、と感じていました。

社外で通用するスキル、というのが
かなり主観的だなと書いてて思ったので
ここで定義しておきます。

私にとって社外で通用するスキルとは、

「会社を辞めても食うに困らない能力」

と考えています。

僭越ながら、今の部署で突然解雇を言い渡されても 食うに困らなさそうな人材はいないと考えています。

今の部署の方々が将来の私の姿である可能性を考えると、 転職を考えざるを得ませんでした。






3. なぜITエンジニアを志したのか

・アイデアをサービスとして素早く形にして世に出すことができる
・プログラミングが楽しいと思ったから
・ITで取って代わられる側からITで取って代える側で働きたいと思った


これが理由です。


イデアをサービスとして素早く形にして世に出すことができる
例えば製造業であれば、商品を企画して実際に形にするだけでも材料費や開発期間といったコストがかかりますが、
Webサービススマホアプリであれば、少ないコストで開発でき、しかも素早くフィードバックを得ることができます。
素早いフィードバックが得られるということは、それだけPDCAを回すスピードも早められますし、より良いサービスを世に出し、
世の中をもっと良くするスピードも早められます。
もし思うように成果が出なかったとしても、すぐに潰すこともできます。
製造業であれば、生産するには工場・材料の確保が必要ですし、作ったからといって簡単に潰せるものでもありません。


こういった観点から、ITを使ったサービスのスピード感に、可能性とワクワク感を抱いていました。



プログラミングが楽しいと思ったから
ただ楽しいから、という全くロジカルでもなんでもない理由ですが、
楽しいと思えるかどうかは、継続して取り組めるかどうか、成長スピードの早さにおいて、
めちゃくちゃ重要だと考えています。


まず、何事も楽しくなければ続かないと考えています。
楽しくなくても続けることはかなり苦しいです。
楽しいと思えば、放っておかれるとたちまち没頭してしまいますし、
何時間でもできてしまいます。
放っておいても取り組めてしまう人と、仕方なく取り組む人では、
どちらの人の方が成長するスピードは早いでしょうか。
答えは明白だと思います。



ITで取って代わられる側からITで取って代える側で働きたいと思った
内勤として何ヶ月か勤務した後、バックオフィス業務領域はなくなることはないにせよ、
自動化されて部門ごと縮小し、将来的には失職してしまうのではないかという危機感から、
転職を考え始めるようになりました。

内勤に配属されてから、営業時代にはあまり触れていなかったエクセルやワードに触れ、
ボタン一つで書類の作成やデータ抽出が出来てしまうPCの便利さに気づき、
その流れでプログラミングにも興味を持ち始めました。

プログラミングに興味を持ってからは、Progate、ドットインストールで
HTML、CSSjavascript等を学習していましたが、
メンターの必要性を感じ、スクールに通うことにしました。




TECH::EXPERTを選んだ経緯
TECH::EXPERTを選んだ経緯は、友人に頼み込み、
「どんなエンジニアでもいいから、話聞かせてくれ!」と
半ば強引に頼み込み、お会いした際に、TECH::CAMPを卒業して
今はWebエンジニアをやっているという方に出会うことができ、
その時に現在のスクールの存在を知りました。


その方との会話を通じて、何もできない未経験の状態から
中途入社でWebエンジニアとして雇用してくれるような優しい会社はないと感じ、
スクール受講を決めた次第です。


同じ時期にSESの方ともお会いする機会があったのですが、
話を聞いて、絶対にSESはやめようと思いました。笑
ネットの評判まんまだったからです。


いまは簡単なチャットアプリはRailsで作れるようにはなり、
デプロイまでこなせるようにはなりました。










4. おわりに

拙い文章をここまで読んでいただき、本当にありがとうございました。

まだいい報告ができるかどうかも
わかりませんが、最後まで全力で走りきりたいと考えています。

JavaScriptの動作確認に最適!JSFiddleの使い方

こんにちは!kossyです!



さて、今回はJavaScriptのコード確認がWeb上で簡単にできるJSFiddleの使い方について、
ブログに残したいと思います!


JSFiddleは、会員登録無しで無料で利用できる開発の手助けとなり得るWebサイトです。
jsfiddle.net



デフォルト画面の設定変更

デフォルトの画面はこんな感じです。
f:id:kossy-web-engineer:20180918080824p:plain



黒い画面が見辛い人は、
f:id:kossy-web-engineer:20180918080920p:plain


settingsをクリックするとメニューが表示されるので、
GeneralのDarkthemeのトグルボタンをOFFにすると、



白くなって見やすくなると思います。
f:id:kossy-web-engineer:20180918080650p:plain


settingsでは画面割りなんかも変更できますので、
自分が操作しやすいように色々と試してみるのがいいかと思います。



基本的な使い方


HTML、CSSJavaScriptの欄にそれぞれコードを書いていけばOKです。
HTMLは入力補助が搭載されており、要素名を書いてtabキーを押すと、要素名を<>で囲ってくれます。

コードの実行結果を確認したい場合は、Runボタンをクリックします。
すると、Result(classic modeでは右下)に結果が反映されます。

Runクリック前
f:id:kossy-web-engineer:20180918082316p:plain



Runクリック後
f:id:kossy-web-engineer:20180918082337p:plain




また、書いたコードの結果がすぐにResultに反映されるように設定することもできます。

settingsのbehavior欄のauto-run codeのトグルボタンをONにします。(デフォルトではOFFになっています)
f:id:kossy-web-engineer:20180918080920p:plain

これでRunボタンを押さずとも実行結果を確認できるようになります。


コードの保存

updateボタンを押すと、ブラウザ上にコードを保存できます。
そしてURLが更新されます。
URLがわかっていれば、誰でもupdate時点のコードを閲覧することができます。

https://jsfiddle.net/fkyLm8wx/1/
updateをクリックするごとに、上記のURLの/1/の部分の数字が増加していきます。

過去のコードまで戻りたい場合は、アドレスバーに数字の部分を変更したURLを入力すれば戻ることもできます。


とりあえずこんなもん!

実行結果を確認するくらいであれば、上記のことを知っていれば大丈夫だと思います!

金融知識の収集に役立つサイトまとめ

こんにちは!kossyです!



唐突ですが、金融周りの知識の収集に役立ちそうなサイトをまとめてみました。



Market Hack(外国株ひろば Version 2.0)
http://markethack.net

著者の広瀬隆雄氏は外資系証券会社で第一線で活躍されてきた証券マンです。
米国株の情報発信に関しては、日本で一番詳しく、記事の更新も頻繁です。

個人的に面白かった記事を抜粋します。
markethack.net

markethack.net
米国株と関係ないやん!っていうツッコミが飛んできそうですが、
歴史を知ることによって、過去のデータから未来を予測することが可能になります。
面接で今までの経歴を聞いて活躍しそうかどうか判断するのと似ている気がします。


カテゴリ数は100を越え、金融だけでなくキャリアアップのことや英会話の記事なんかもあり、
カバーする範囲は相当広いです。カテゴリ別で興味を持った記事を読んでみることをおすすめします。


闇株新聞
http://yamikabu.blog136.fc2.com

金融から歴史、政治まで幅広くテーマとして扱い、テレビでは扱われないようなニュースを題材にしたり、
表面的なことだけの報道になっているニュースを、その本質的問題から解説する記事が好評で、
一部業界人からは熱烈な支持を受けていたそうです。

既に更新を停止されていらっしゃいますが、2010年頃から2018年7月まで平日はだいたい更新していました。


専門用語が頻出するので理解が難しいこともありますが、頭の片隅に入れるだけでも構わないので、
興味のある記事から読んでみることをお勧めします。


ひふみ投信の月次レポート
https://www.rheos.jp/toushin/about/report/

カンブリア宮殿でも取り上げられた、レオスキャピタルワークスが運用する投資信託である
ひふみ投信の月次報告資料です。

運用担当者のコメントが端的にまとまっていてわかりやすく、その月にどんな政治イベントがあったのか、
どんな値動きだったのかを把握するならこちらのレポートを読めばいいと思います。



ペペラのバブル物語
http://pepera.jp/story_of_bubble

イムリーな情報ではないですが、過去起きたバブルについて、
面白おかしく紹介しています。

個人的に、日本のバブル崩壊の流れは印象に残っています。


みずほ総合研究所
https://www.mizuho-ri.co.jp/index.html


みずほ総研に限らずですが、シンクタンクのレポートは内容は難しいものの、
過去のデータや予測に基づき、数字を中心に論理展開を行うので、
納得感が強いです。

他にも、野村総研三菱UFJリサーチ&コンサル、第一生命経済研究所等、
「日本 シンクタンク」で検索するとたくさんヒットしますので、
興味のある方は探してみてください。

リーマンショックから10年 私の感じたリーマンショック

こんにちは!kossyです!




たまにはプログラミング以外の話題ということで、リーマンショックを取り上げてみます。

ニュースもリーマンの話題が多いですね。




当時私は中学3年生で、受験勉強や野球、友人と遊ぶことに熱を入れていて、
世界情勢には全くと言っていいほど興味はありませんでした。


さすがにめざましテレビとかイブニングニュースは見る時もあったとは思うのですが、
大きいダンボールを持った厳つい外国人がビルから出てきている印象しか残ってなかったです。












なんか景気が悪いなと思い始めたのは、2009年の秋くらいからです。








私の父は建設系の仕事(いわゆる土方)をしていました。

2008年当時は土日返上で毎日忙しく働いていて、
朝は私よりも早く起きて現場に行き、帰りは20時くらいでした。




しかし、2009年の秋くらいから父の仕事の状況が変わり始め、
平日は私が学校から帰ってくるよりも早く家に居て、
休日はゲオで借りたDVDを見ている姿を見かけることが増えました。



毎日の食事は一品少なくなり、間食でいつも食べていたおやつは無くなり、
家計を管理していた母親はパートを始めました。



そう、父の仕事がどんどん減って収入が減り、家計が苦しくなっていたのです。


当時の家計の状況について母親は、
「食費は月2万で家族4人と犬1匹を養っていた」
と語っていました。

20000円 / 30日 = 1日あたり約670円
670円 / 4.5人 = 一人(と一匹)当たり1日148円

コンビニでおにぎりを買ったらおしまいのレベルです。
母親には苦労をかけたなぁ。













さて、なぜこのような状況になってしまったのか。











このデータを見れば理由は一目瞭然です。
f:id:kossy-web-engineer:20180916130814p:plain
出典: 報道発表資料:建築着工統計調査報告(平成28年計分) - 国土交通省


リーマンショックの翌年に住宅着工件数が大きく減少しています。
(2007年に建築件数が減少しているのは改正建築基準法が適用され、確認審査などが厳格化され、建築確認業務が停滞したため)


住宅着工件数は、経済にとって非常に重要な指標です。
住宅を建てるのは、列挙仕切れないくらい様々なひとが関わります。
木材を扱うひと、木材に取り付ける金具を扱うひと、材料を運ぶひと、家を組み立てるひと、家を設計するひと、それを現場で管理するひと、足場を組み立てるひと、ガラス、サッシを扱うひと、トイレや水回りの製品を作るひと、それを設置するひと、電気やガスを通すひと、冷蔵庫やテレビを作るひと、それを自宅まで運び入れてくれるひと、机や椅子を作るひと、家に住んでくれるひと。
まだまだたくさん関わるひとがいると思います。


ここまで書いてお気づきかと思いますが、住宅産業は周辺産業の裾野がとても広いのです。
古い資料ですが、以下のように言及されています。


03 年度の住宅投資は、名目ベースで約 18 兆円であり、GDPに対する割合は 3.6%と低い。しか
し、住宅投資は、建設業や不動産業のみならず鉄鋼、木材、ガラス産業等への波及が大きい。加え
て、耐久消費財の消費も誘発することが多く、経済全体に対する影響は小さくない。例えば、「公
庫融資利用者に係る消費実態調査(平成 15 年度、住宅金融公庫調査)」では、住宅購入後1年以内
に購入した(及び購入予定)耐久消費財の平均金額を調査している。持家、分譲住宅を購入した層
の消費金額の平均は、173.4 万円(02 年度の住宅着工で加重平均)との結果が出た。また、住居の
移転にともなう引越し費用の平均的な金額は 20.6 万円であった。これらを 03 年度の持家、分譲住
宅の着工戸数である 70.7 万戸を対象にして試算をすると、約 1.4 兆円の消費を誘発している計算に
なる。実際には、貸家や給与住宅に関しても消費を誘発すると考えられるため、更に金額は大きく
なると考えられよう。

出典: http://group.dai-ichi-life.co.jp/dlri/monthly/pdf/0503_9.pdf


つまり、住宅産業に関わる建設業者だった父は、リーマンショックの煽りを受け、
大幅に減少した住宅着工件数の影響をもろに受け、
結果として家計も苦しくなってしまったのです。



当時は高校生ながら、経済と一般市民の生活はとても密接に関わっているのだなと感じた次第です。

SQLインジェクションとはなんぞや

こんにちは!kossyです!



なんぞやシリーズ第二弾ということで、今回はSQLインジェクションについて調べてみました。
引用だらけでキュレーションメディアみたいになってしまったので、
何度も読んで自分の言葉で噛み砕いて説明できるようにする必要性を感じてます、、、


以下、本文です。




そもそもSQLって?

SQLとは、データベースから値を取り出したり、データを挿入したりする指示を出す専用の言語のことです。
SQLはISO(国際標準化機構)なる組織で規格が標準化されており、一度学習すればほかのデータベースでもほぼ同じように操作可能です。

SQLの読み方は、「エスキューエル」や「シークウェル」が一般的だそうです。










SQLインジェクションって?

まずはwikipediaで調べてみました。


SQLインジェクション(英: SQL Injection)とは、アプリケーションのセキュリティ上の不備を意図的に利用し、アプリケーションが想定しないSQL文を実行させることにより、データベースシステムを不正に操作する攻撃方法のこと。 また、その攻撃を可能とする脆弱性のことである。

出典:SQLインジェクション - Wikipedia


うーん?って感じなので別のサイトでも調べてみました。



データベース(DB)と連携して動作するWebサイトでは、外部から入力された値を元にSQL文(データベースへの命令文)を組み立てることがよくあります。SQLインジェクション脆弱性を持つサイトでは、入力された値によっては意図しないSQLが生成され、結果として不正にDBのデータが読み取られたり、データが改ざんまたは削除されたりするなどの被害をこうむる可能性があります。

出典: https://academy.gmocloud.com/advance/20150608/700

なるほど、不正に操作することの具体例がわからなかったから理解が甘くなってたわけですね。


実際にSQLインジェクション攻撃を起こすSQL文も紹介されていました。
SQLインジェクションでデータベースを攻撃(!)してみよう (解答編) | 丸ノ内テックブログ


適切に対策しないと、個人情報が流出してしまうこともあるんですね。









SQLインジェクション対策


先ほど紹介したブログには以下の記述がありました。


SQLインジェクションには決められたパターンがあります。
たとえば、自分が実行したいSQLをちゃんと動作させるために、前後に書かれたSQL文を無効化、もしくは無難に終わらせる必要があります。
そのため、多くの場合はSQLインジェクションを行うための入力値として、最初に「\’」を持って来たり、また後には「;–」と書いて以降のSQLを無効化します。
要は、これらの値が入ってきてしまう可能性があるプログラムの書き方をしていれば、SQLインジェクションが発生してしまうということになります。
こういった理由から、プリペアドステートメントを使うなど、適切なSQLインジェクション対策を行わなければいけないのです。

出典: SQLインジェクションでデータベースを攻撃(!)してみよう (解答編) | 丸ノ内テックブログ


プリペアドステートメントの意味がわからなかったため、調べてみました。

prepareメソッドはプリペアドステートメントと呼ばれるものを利用するための関数です。
プリペアドステートメントとは、SQL文を最初に用意しておいて、その後はクエリ内のパラメータの値だけを変更してクエリを実行できる機能のことです。
この機能を利用することでクエリの解析やコンパイル等にかかる時間は最初の一回だけで良くなり、より高速に実行することができます。
また、SQLインジェクション対策に必要なパラメータのエスケープ処理も自動で行ってくれるため、安全かつ効率の良い開発が出来ます。

出典: PDO prepare プリペアドステートメントの使い方 | PHP入門~bituse~

あらかじめ値をセットしたSQL文を書くのではなくて、
動的に変更できるようにする機能という意味でしょうか。(間違ってたら教えてください、、、)


他のページも閲覧してみました。



3-1:サーバでの対策
 SQLインジェクションは、主にWebアプリケーションのプログラムに問題があります。その問題は、入力した文字列にSQL文を仕込まれた場合に、それを命令文と認識してしまうことです。そのため、SQL文を成り立たせない実装が有効になります。これを「エスケープ処理」といいます。具体的には、SQL文で特別な意味を持つ記号や文字列を、別の文字に置き換えたり削除したりします。
 例えば、入力された文字列の中に「’」(シングルクォート)があった場合には、これを「”」(ダブルクォート)に置き換えます。これにより、ログイン認証を回避する「’or’1’=’1」というコードが「”or”1”=”1」に変換され、無害な普通の文字列として認識されるようになります。また「’」だけでなく「/」(バックスラッシュ)にも、同様の処理を行います。
 言語によっては、バインド機構(SQL文に変数の場所を示す記号を置いた後に実際の数値を割り当てる仕組みのこと)を利用することで、独自にエスケープ処理を行う必要がなくなります。このほか、入力エリアに入力できる文字や文字数などに制限を設けることも有効です。

3-2:ネットワークでの対策
 SQLインジェクションに限らず、脆弱性が公表されたときには、その脆弱性を解消するためのパッチやアップデートが合わせて公開されます。これらをすぐに適用すれば、脆弱性を狙った攻撃から保護することができます。しかし、Webアプリケーションの場合は、ほかに動作している多くのアプリケーションに悪影響を及ぼしてしまう可能性があるため、適用の前に検証が必要になります。
 しかし、検証には時間がかかりますし、検証後すぐに適用することも難しいのが現状です。とはいえ、あまり時間が空いてしまうと、脆弱性を悪用した攻撃が行われる可能性もあります。そこで最近、ニーズが高まっているのが「WAF(Webアプリケーション・ファイアウォール)」です。
 WAFは、Webアプリケーションに送られる通信をチェックするのですが、WAFはさまざまな脆弱性に対する攻撃コードをシグネチャとして持っていて、これと合致するコードを無効化します。つまり、脆弱性を解消するのではなく、その脆弱性を悪用しようとする攻撃を検知して対策を行います。導入や管理・運用が容易なクラウド型のWAFも複数提供されているため、脆弱性対策として導入を検討することも方法のひとつです。

3-3:Webに脆弱性がないか検査する
 SQLインジェクションに限らず、Webアプリケーションの脆弱性は定期的にチェックしたいものです。ベストな対応は、Webサイトで使用しているすべてのソフトウェアやアプリケーションのバージョンを把握し、パッチやアップデートが公開されたら迅速に適用することですが、なかなか難しいのが現状です。
 そこで、外部から擬似的な攻撃を行い、悪用されると危険な脆弱性があるかどうかを確認する「脆弱性診断」というサービスがあります。検査する脆弱性の内容はサービスによって異なりますが、多く使用されているものや、「OWASP Top 10」などに挙げられているものには対応しているケースが多くなっています。別のサービスに付帯しているケースも多いので、調べてみるとよいでしょう。

3-4:それぞれの立場で対策を
3-4-1:開発者
 Webアプリケーションやデータベースの開発者は、SQLインジェクションを引き起こされないようプログラミングする必要があります。最近では、セキュアプログラミングやシフトレフトなどとも呼ばれますが、脆弱性を作り込んでしまわないことが重要です。ガイドライン も複数出ていますので、参考にするとよいでしょう。

IPA:「安全なウェブサイトの作り方」
・OWASP Top 10:「最も重大なウェブアプリケーションリスクトップ10(PDF)」
・JSSEC:「Androidアプリのセキュア設計・セキュアコーディングガイド」
経済産業省:「開発者向けセキュリティ関連コンテンツ」(リンク集)

3-4-2:発注者、社内IT部門など
 Webアプリケーションやデータベースなどを発注する側は、依頼書や仕様書に脆弱性対策があることを確認しましょう。また、IT部門など利用する側は、サーバなどの脆弱性対策の確認、あるいは利用するWebアプリケーションやソフトウェアのバージョン管理、定期的な脆弱性診断などを行います。WAFによる攻撃防御も検討しましょう。

出典: SQLインジェクション攻撃への対策|脆弱性を悪用する仕組みと具体例








RailsでのSQLインジェクション対策

公式ガイドには、


Ruby on Railsには、特殊なSQL文字をフィルタする仕組みがビルトインで備わっています。「'」「"」NULL、改行がエスケープされます。Model.find(id)やModel.find_by_なんちゃら(かんちゃら) に対しては自動的にこの対応策が適用されます。ただし、SQLフラグメント、特に 条件フラグメント (where("..."))、connection.execute()またはModel.find_by_sql()メソッド については手動でエスケープする必要があります。

出典: Rails セキュリティガイド | Rails ガイド

との記述がありました。
具体例は以下のqiita記事が参考になりそうです。
qiita.com

TCP/IP通信ってなんぞや

こんにちは!kossyです!




今回は、TCP/IP通信について記述します。



そもそもTCP/IPって?

TCP/IPとは、TCP「Transmission Control Protocol」とIP「Internet Protocol」の英語の頭文字を取って組み合わせた用語です。

ここでProtocolという言葉が出てきました。

プロトコルについて調べてみました。


プロトコルとは、手順、手続き、外交儀礼、議定書、協定などの意味を持つ英単語。通信におけるプロトコルとは、複数の主体が滞りなく信号やデータ、情報を相互に伝送できるよう、あらかじめ決められた約束事や手順の集合のこと。

コンピュータ内部で回路や装置の間で信号を送受信する際や、通信回線やネットワークを介してコンピュータや通信機器がデータを送受信する際に、それぞれの分野で定められたプロトコルを用いて通信を行う。英語しか使えない人と日本語しか使えない人では会話ができないように、対応しているプロトコルが異なると通信することができない。

人間同士が意思疎通を行う場合に、どの言語を使うか(日本語か英語か)、どんな媒体を使って伝達するか(電話か手紙か)、というように2つの階層に分けて考えることができるが、コンピュータ通信においても、プロトコルの役割を複数の階層に分けて考える。階層化することによって、上位のプロトコル(を実装したソフトウェア)は自分のすぐ下のプロトコルの使い方(インターフェース)さえ知っていれば、それより下で何が起きているかを気にせずに通信を行うことができる。電話機の操作法さえ知っていれば、地中の通信ケーブルや通信会社の施設で何が起きているか知らなくても通話できるのと同じである。

出典:
http://e-words.jp/w/%E3%83%97%E3%83%AD%E3%83%88%E3%82%B3%E3%83%AB.html

いろいろと小難しいことが書いてありましたが、インターネットにおける通信規約という認識で大丈夫そうです。






TCP/IPのそれぞれの特徴って?


次にTCP/IP通信の違いについてです。

TCP通信は接続相手を確認してから送受信をする点がIP通信とは異なります。
このため、IP通信と比べ、信頼性は高いが送受信のスピードが劣ります。

厳密に言うとTCPとIPは異なるもので、はがきを例にすると宛先がIP、実際に配達するのがTCPの役割となっています。





TCP/IPの階層モデル

TCP/IP通信には階層モデルなるものがあるようで、この論点は避けては通れなさそうなのでまとめてみます。


TCP/IPには4つの階層があり、
・アプリケーション層(アプリケーションで使う通信の動きを決める層。 HTTP, FTP, DNS等)
トランスポート層(ポートを元に宛先のアプリケーション層にデータを渡す層。 TCPがここに該当)
ネットワーク層(IPアドレスを元にデータを宛先まで伝達する層。 IPがここに該当)
・ネットワークインターフェース層(ネットワークに接続するハードを決める層。)
に分かれています。
この4つの層に分けることで、仮に仕様変更があった場合に、変更が必要な層のみ変更するに留めることが出来ます。
仮に1つのプロトコルで構成されていると、仕様変更のたびに、全体を入れ替える必要性が出てきます。






通信時の流れ

簡単に書くとこの順になります。

アプリケーション層

トランスポート層

ネットワーク層

ネットワークインターフェース層


わかりやすい解説をされている記事を見つけたため、引用させていただきました。


以下、引用です。


⑴送信時は上から下の層にデータが流れて、送信データには各層のヘッダが付加される
送信時、アプリケーション層で作成したデータは、トランスポート層に渡され、
その後、トランスポート層からはインターネット層に渡され、
さらに、インターネット層からはネットワークインターフェース層にデータが渡されます。
ここで重要なのが、各層を通過する時には通過層のデータを、
送信データにヘッダという形で付加するということです。
受信時はこの逆にデータが流れていきます。

⑵各層は役割分担されていて、それぞれ明確な使命をもっている
例えば、トランスポート層TCPUDPと言ったプロトコルを持っていますが、この層の使命は「アプリケーション層からもらったデータを宛先のアプリケーション層に渡す事」であり、TCPUDPというのは、「使命を果たす手段」になります。
各層には複数のプロトコルが存在し、それらのプロトコルを全くの別物としてとらえてしまい、TCP/IP全体像の理解をし辛くしているように思います。TCPUDPも宛先のアプリケーション層にデータを渡すという使命は同じです。手段(プロトコル)は違えど使命は同じと思えば、なんとなく理解できそうな気がしますね。

送信先の各層は、送信元の自分と同じ層が送った情報を元に使命を全うする
例えば、インターネット層の使命は「IPアドレスを元に、データを宛先のコンピュータまで届ける事」です、送信元のインターネット層では自分と宛先のIPアドレスの情報を送り、送信先では自分のIPアドレス宛かをチェックし、自分宛でない場合は宛先のIPアドレスを元にデータを転送し、自分宛の場合はデータを受け取ります。

⑷通信時は各層のプロトコルを組み合わせて行う
よくある例として、webページを表示する場合は
アプリケーション層のプロトコルはHTTPで、トランスポート層TCP、インターネット層はIP、ネットワークインターフェース層はEthernet。というように、各層で複数のプロトコルから適切なものを選んで通信を行います。また、TCP/IPという言葉は、TCPプロトコルとIPプロトコルをあわせて通信する事を指すだけでなく、アプリケーション層からネットワークインターフェース層までのプロトコルすべてを指してTCP/IPとも呼びます。



参考にしたサイト:
https://qiita.com/genreh/items/05186691fbf8c10a4a48



ここまで抑えればある程度通信周りの知識はつきそうです。

JSONを見やすく成形してくれるchormeのプラグイン 'JSONView'

こんにちは!kossyです!




ここ最近急に寒くなったのが原因なのか、風邪をひく人が増えているみたいです。
私は10月くらいまでプライベートでは半袖短パンの勝俣スタイルなので、
そろそろ改める必要性を感じています。






さて、今回はJSON形式のデータを見やすく成形してくれるchormeのプラグインをご紹介します。


chrome.google.com



以下、導入手順です。


1. 上記のURLに飛び、追加ボタンをクリック

2. アラートが出るので、拡張機能を追加をクリック
f:id:kossy-web-engineer:20180912191046p:plain

以下の表示に切り替われば導入成功です。
f:id:kossy-web-engineer:20180912191157p:plain



この拡張機能を追加すると、

こうだったのが

f:id:kossy-web-engineer:20180912191336p:plain



こうなります。

f:id:kossy-web-engineer:20180912191359p:plain


桁違いに見やすくなりました!APIを使うときなんかに便利ですね。
導入手順も簡単なので是非使ってみてください。


(画像内で使ったBITCOINの価格をリアルタイムで取得できる
APIのアドレス=> https://api.coindesk.com/v1/bpi/currentprice.json)

RDBアンチパターンの紹介スライド

こんにちは!kossyです!






TwittterでDBに関して有益そうなスライドを見つけました。
speakerdeck.com




DB周りの知識は実務でも必須になると思うので、
じっくり読んで学びたいと思います。

見辛いログを見やすくしてくれるgem 'rails-flog'

こんにちは!kossyです!


業績好調でも人員削減を行う大企業のニュースが出てました。
headlines.yahoo.co.jp


将来(といってもあと15年で40歳。早い!)人員削減対象のミドルにならないよう、自己研鑽の必要性を感じます。







さて、今回は、ごちゃごちゃしたターミナルのログを見やすく成形してくれるgem'flog'について
ブログに残したいと思います。


以下、導入手順です。

gemfileのdevelopmentにgem 'rails-flog'を追記

$ bundle install

これだけです。


これで、ターミナルでログを見ると、ログが見やすく成形されるようになります。

(ブログの表示幅の都合で適宜改行をこちらで入れています。)
・rails-flog導入前

Started POST "/posts" for 127.0.0.1 at 2018-09-07 03:01:59 +0900
Processing by PostsController#create as HTML
  Parameters: {"utf8"=>"✓", 
"authenticity_token"=>"~~~~~~(ここに長い文字列が入ります)", 
"post"=>{"kind"=>"cat", "content"=>"にゃーん"}, "commit"=>"画像を確認する(まだツイートされません)"}
  Post Load (1.0ms)  SELECT  "posts".* FROM "posts" 
  ORDER BY "posts"."id" DESC LIMIT $1  [["LIMIT", 1]]
  ↳ app/controllers/posts_controller.rb:18
  CACHE Post Load (0.0ms)  SELECT  "posts".* FROM "posts" 
  ORDER BY "posts"."id" DESC LIMIT $1  [["LIMIT", 1]]
  ↳ app/controllers/posts_controller.rb:19


・rails-flog導入後
Started POST "/posts" for 127.0.0.1 at 2018
Processing by PostsController#create as HTML
  Parameters: 
{
                  "utf8" => "✓",
    "authenticity_token" => "~~~~~(ここに長い文字列が入ります)",
                  "post" => {
           "kind" => "cat",
        "content" => "にゃーん"
    },
                "commit" => "画像を確認する(まだツイートされません)"
}
  Post Load (4.3ms)  
	SELECT
		"posts" . *
	FROM
		"posts"
	ORDER BY
		"posts" . "id" DESC LIMIT $1  [["LIMIT", 1]]
  ↳ app/controllers/posts_controller.rb:18
  CACHE Post Load (0.0ms)  SELECT  "posts".* FROM "posts" 
  ORDER BY "posts"."id" DESC LIMIT $1  [["LIMIT", 1]]
  ↳ app/controllers/posts_controller.rb:19

parametersとPost Loadのところが成形されて、
階層構造が見やすくなってます。



おそらくスマホからこのブログを見ている方が大半だと思うので、
綺麗に成形されているのが伝わりづらいと思いますが、
一度ご自身のアプリに導入して使ってみてください!

腹痛持ちに朗報!近くのトイレ情報がわかるアプリ

こんにちは!kossyです!




突然ですが、冷たい飲み物を飲みすぎてお腹を壊していませんか?




私は冷たい飲み物を飲まなくても、お腹を壊しています。
緊張したり、すぐにトイレにいけない状況になったりすると、便意に見舞われます。
いわゆる、過敏性腸症候群ってやつですね。
もう何度通勤電車内で人間をやめようかと思ったか。
みなさんも経験あると思います。



そんな腹痛持ちの私ですが、
最近神のようなアプリを見つけました。

play.google.com

位置情報を取得し近くにあるトイレを教えてくれるアプリです。
このアプリを使えば、催した時にどこに行けばスッキリできるか一目瞭然です。



また、最近はIoT(Internet of Things)の技術を使って、トイレの空室状況も表示できるようになっているみたいです。
time-space.kddi.com
internet.watch.impress.co.jp



まだ一部地域のみのようですが、
一蘭の座席表みたいにどこが空いているのかすぐにわかるアプリが首都圏のトイレ全てに対応してくれることを切に願っています。