あそぶ技術

フィヨルドブートキャンプでRuby on railsの学習をしている僕の学習ブログです。

標準出力、標準入力とは何か

何故、標準出力と標準入力を知る必要があるのか

フィヨルドブートキャンプではRailsを深く知る為にRailsより仕組みがシンプルなSinatraというRubyフレームワークを学習します。

ただ、Sinatraは解りにくいという声が多いそうです。

じゃあ、Sinatraの動きの元になったCGIについて知ると良いのでは?という事になったそうなのですが、CGIについて知るなら標準入力と標準出力について知る必要があるようです。

前提となる知識多い!

そんな訳で標準出力と標準入力についてkomagataさんに聞く機会を得ました。

というか上の事情によりkomagataさんがCGIについてブログにまとめようと思ったそうなんですが、思いの他まとめるのが難儀だったようで最近ブログを頻繁に書いていた僕にお助けコールがありこのような記事を書く事になったというのが事の次第です。

一応書いてみましたが情報に間違いや不備があったら御指南頂ければ幸いです。

f:id:zeroringo:20180813170432j:plain

あなた今入力しましたね?

僕らが普段スマホやPCでインターネットを使う時も実は様々な入力をしていますし、出力されたものを受け取っています。

例えば何かを調べる時に

  1. あなたが検索サイトでブラウザに検索ワードを入力すると
  2. 検索ワードはインターネットを通って検索サイトに送られ
  3. 送られた検索ワードは検索サイトのサーバー入力されます
  4. 検索サイトのサーバーは検索結果を出力
  5. 検索結果はインターネットを通って戻り
  6. 検索結果をあなたのブラウザに出力してくれます。

今このページ見てるって事はあなたも間違いなく入力しています。

そして今出力されたこの文字を読んでいる。

もう無関係ヅラ出来ないですね(悪い笑顔

f:id:zeroringo:20180813171127j:plain

様々な入力

今回は検索ワードを入力するという例でした。

しかし、言葉を入力する事だけでなく入力には様々な種類があります。

例えば

マウスクリックすることも、スマホタッチする事も、キーボード叩く事も、スマートフォンフリックする事も入力です。

出力も同じで私たちは様々な場所に出力された様々な状態の情報を受け取っています。

例えば

出力された通知スマートウォッチで受け取ったり、モニターから出力された映像観たり、プリンターからを出力させたりと誠に多様です。

網膜レンズなど未来には新しいデバイスが世の中に生まれ入力する方法や出力されるデバイスは変わっていくと思います。

しかし、入力と出力自体は無くならないでしょう。(良い事言った風

f:id:zeroringo:20180813170727j:plain

telnetを思い出せ!

teinetを思い出して下さい。

HTTPの所でやったターミナルでリクエストを入力するとレスポンスが返ってくるやつですね。

zeroringo.hateblo.jp

あの時のtelnetでやったことを分解すると

  1. tarminalでリクエストを入力すると
  2. tarminalにレスポンスが出力される

となります。

そうですお気付きの通り

これも入力と出力だったんだよー!!

そして実はこれ、標準入力と標準出力です。

標準入力と標準出力とは何か

入力と出力なんですが実は初期設定で入力される所と出力される先が決まっています。

例えばLinux(CUI)だとマウスで操作出来ませんよね

  1. 黒い画面にキーボードで文字を入力し
  2. その結果が黒い画面に出力されます。

この場合、入力先も出力先も黒い画面です。

ただ別に自分でそう設定したわけでは無いですよね。

最初っから黒い画面に入力し出力されるように設定されていたわけです。

この最初から決まっていた入力先と出力先

これが標準入力と標準出力です。

f:id:zeroringo:20180813172647p:plain

STDINとSTDOUT

設定ファイルを変更する事で標準入力と標準出力を変更することが出来るんですが、設定ファイルは勿論英語で書かれています。

では、標準入力と標準出力はどう書かれているかなんですが

  • 標準入力はSTDIN
  • 標準出力はSTDOUT

と表記されています。

これは省略された言葉でそれぞれ

  • STDはStandard(標準)の略
  • INはinput(入力)の略
  • OUTはoutput(出力)の略

です。

入り口と出口

f:id:zeroringo:20180813172323p:plain

入力は入り口で出力は出口と考えると解りやすいかもしれません。

僕らはRailsでサービスを作り、お客さんはサービスを使って頂きますが

その時にお客さんの出入り口とスタッフの出入り口を分けているんです。

f:id:zeroringo:20180813172347p:plain

tarminalはスタッフ専用の出入り口みたいなもんでお客さんはここを出入りしないです。

入ってくるのは関係者か多分悪い奴です。

最初はスタッフ用の出入り口しかない状態からサービスを作っていくんですね。

終わりに

以上です。

解りにくい所や間違っているところがあればブログのコメント欄やツイッターで御指摘、御指南等頂ければ幸いです。

ありがとうございました。

f:id:zeroringo:20180813171657j:plain