#acl benevolent0505:admin,read,write,revert,delete Known:read,write All:read #format gfm # プログラミング講習 第1回 ~ イントロダクション ~ ## プログラミングについて 皆さんはプログラミングに対してどういうイメージを持っているでしょうか? そもそもプログラミングという言葉を大学に入るまで、情報系に進むと決めるまで聞いたことがなかったかもしれません。言葉を知っている人はコンピュータに向かって何かを打ち込んでいる様子を思い浮べるかもしれません([参考画像](https://www.google.co.jp/search?q=%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0&espv=2&biw=1920&bih=971&source=lnms&tbm=isch&sa=X&ved=0ahUKEwiIlrC9ysjMAhUiGKYKHWWPDBkQ_AUIBygC))。もしくは何かかっこいい・出来ると良いらしい・授業で必要だから・仕事で必要だから(でも具体的に何をするのかは知らない)というイメージを持つ人もいるでしょう。 この章ではまずプログラミングとはどの様なことをするのか、なんの為にするのか、そのことについてのイメージを持ってもらいます。 ### プログラミングとは何か ~プログラムについて~ プログラミング(Programming)とは、文字通りに言ってしまえばプログラムを書くことです。ではこの *プログラム* とは何でしょう。「運動会のプログラム」など普段でも使うことのある言葉ですが、ここで言うプログラムとは「コンピュータ(機械)にやらせたい命令を書き並べたもの」のことを言います。 身の周りのほとんどの物の中にはコンピュータが入っていて、その中でそれぞれのプログラムが動いています。例えばスマートフォンやPCは当然のこと、3DSやVitaなどのゲーム機やエアコン、車などの中にもコンピュータが入っています。 例えばエアコンを考えましょう。エアコンに入っているコンピュータは何をしているのでしょうか。エアコンにはリモコンを使って指示を与えることができます。「冷房にしろ」とか「設定温度を24度にしろ」とか「6時間後にオフになるようにして」とか様々です。リモコンから与えられた指示はエアコン内のコンピュータに渡されます。エアコン内のコンピュータはこの指示をもとに処理をして、その指示を実現します。 例えば「冷房にして」という指示を受け取ると、コンピュータはその指示をもとに様々な処理を行ってエアコンの各部を制御します。その結果エアコン全体が冷房運転するようになるわけです。他の設定温度を変えたりおやすみタイマーを設定したりといった機能もこうして実現されています。 この様な、「冷房にしろ」などのやらせたい命令・指示を実現する処理を書き並べたものがプログラムなのです。そして、それを書くのがプログラミングです。 (例引用元: https://wiki.mma.club.uec.ac.jp/alstamber/Clanguage/WhatIsProgramming ) ### もう少し具体的に ~プログラミングの考え方~ もう少し具体的なイメージを持ってもらう為に、駅にある自動改札機のプログラムについて考えてみましょう。普段使う自動改札機の中にもコンピュータが入っていて、切符やICカードの料金計算をしています。ここでは簡単に乗車駅で切符を改札機に通す場面だけを考えてみます。 いきなりプログラミング言語でプログラムを書く前に、日本語で自動改札機にやらせたい処理の手順を考えてみましょう。前の項では、プログラムとは「コンピュータ(機械)にやらせたい命令を書き並べたもの」と書きました。下に書いた手順も改札機にやってほしいことを順々に記述したものになっています。 さて、ここでのコンピュータにやらせたいことは「入れた切符の条件に応じてバーを開け閉めすること」です。しかしこの命令では(僕達の感覚では具体的に思えても)抽象的すぎてコンピュータはそのまま理解することができません。コンピュータが理解出来るまでに、やらせたいことを具体的に書かないといけないのです。そこでプログラムを書くときは * やらせたいことを細かい部品にして考える * 細かい部品がどういう手順の組み合わせなのかを考える という考え方をします。この例だと`1,2,3,4`のそれぞれが部品に対応しています。一行ずつ過程を追っていきましょう。 1. 切符の情報を読み取る 2. 読み取った情報で改札を通れるかどうか判断する 条件:(日付が当日のものである かつ 乗車駅が範囲内である) * 通れる場合 1. 改札機のバーを開く 2. 切符に穴を開ける * 通れない場合 1. 改札機のバーを閉じる 2. 警告音を鳴らす 3. 切符を出す 4. 次の切符が投入されるのを待つ(投入されたら1からスタート) この手順こそがプログラムなのです。もちろんコンピュータは日本語で書かれたこの書き方のままでは手順を理解できないので、プログラミング言語で書いてあげる必要があります。プログラミングは、コンピュータにやらせたいことの手順をプログラミング言語で書くこととも言えるでしょう。 さて、 *プログラムは書いた通りにしか動きません。* つまり、僕の書いていないことは行わないのです。例えばこの自動改札機に、折れまがっていて情報が読み取れない切符を投入したとしましょう。すると改札機はどの様な動きをするでしょうか? 答えは何もしません。このプログラムでは`1`で情報を読み取った後、`2`でその情報を元に改札を通れるかどうかを判断します。しかしこのプログラムには切符が読み取れない場合のことが書いてありません。改札を通れるかどうかの判断の基準は「日付が当日のものであること」と「乗車駅が範囲内であること」の2つだけで、切符が読み取れるかどうかは基準の中に書かれていません。この場合だと、通れる場合通れない場合のどちらの処理も行われないで、`3`の処理をすることになります。 ちなみにこのプログラムだと、読み取れない切符を投入したとき、前の人が改札機を通った後の場合はバーが開かれたままなので、そのまま通れてしまいます。通れる場合は音も何もでないので、通れる切符を入れた人と読み取れない切符を入れた人の区別が出来ません。これだと不正乗車の原因になってしまいます。このプログラムを書いたプログラマは、このプログラムで正常に通れる通れないを区別出来ると考えているので、この動作はプログラマの想定外動作、即ちバグとなります。 ### プログラミングで出来ること さて、これまででプログラムとは何か、プログラミングとは何をすることかのイメージが何となくつかめてもらえたかと思います。ではプログラムを書いて何が出来るのでしょうか。ここではそれについて書きます。 プログラムを書く理由は、基本的には不便を解消するためです。人がやると面倒な作業をコンピュータにやらせるためと言ってもいいかもしれません。 不便を解消する例として、MMAの食事会参加人数の集計があります。人がやる場合だと、まずMMAWikiの[食事会掲示板のページ](https://wiki.mma.club.uec.ac.jp/bbs/2016%E9%A3%9F%Eb4%BA%8B%E4%BC%9A)を見て人数を数えます。純粋に書き込み件数=参加人数だと良いのですが、二重に投稿している人がいたり、参加しないという書き込みをしている人がいたりとなっているので1人ずつ確認していかなければいけません。数え間違えないために、何度も数え直しをする必要もあってとても面倒で不便です(更に現役部員と新入部員の数え分けをするとなると、もっと大変です)。そこで参加人数を集計してくれるプログラムを書くととても便利です。プログラムを動かせば、直ぐに正確な参加人数がわかって、何度も人数を数える手間と時間が省けます。 #### コンピュータの得意なこと 一般的にコンピュータが得意とする作業があります。 * 計算する作業 * 繰り返し行う作業 * 記憶をする作業 #### プログラマの美徳 プログラムの美徳と呼ばれていることがあります。これはPerlというプログラミング言語を開発した、ラリーウォールという人が言った言葉です(だったはずです)。 * 怠惰 * 面倒なことはコンピュータにやらせる→そのプログラムを書くために努力をする * 短気 * 既存のものに満足しないで、常によりいいものがないか(いいものを作れないか)疑問に思う * 傲慢 * 自分の書いたプログラムに自信を持つ 参考: [プログラマの性格 by masarakki](https://masarakki.gitbooks.io/c89-the-way-of-programmer-life/content/programmers-character.html) ### 色々なプログラミング言語 世の中には色々なプログラミング言語があります。一部を挙げてみただけでもC, C++, D, C#, Java, Scala, Haskell, JavaScript, Ruby, Perl, Python, etc...と色々あります。何故こんなにも沢山言語があるのでしょうか。 一概には言えませんが、一つ理由を挙げるとしたら、それぞれ作られたときの目的が違います。 ではどの言語を選べばいいのでしょうか。一番妥当な選び方は、やろうとしていることの目的に合わせて選ぶのが吉です。今回はプログラミング初心者にも扱い易く、cookpadや初期のTwitterでも使われていた **Ruby** という言語を使います。 ## 環境構築 この項目では自分のコンピュータ上で、Rubyというプログラミング言語を使ってプログラミングが出来るようにします。またAtomというテキストエディタをインストールして、快適にプログラムを書けるようにします。 以下ではRubyとAtomについて、Linux/UNIX, OS X(Mac), Windowsでのインストール方法を解説します。 公式のインストールページを参考に書いているので、わかる人は次のページを見た方が早いと思います。 * [Rubyの公式ダウンロードページ](https://www.ruby-lang.org/ja/downloads/) * [Atomの公式ダウンロードページ](https://github.com/atom/atom/releases) 余談:[開発環境とは](http://e-words.jp/w/%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89.html) ### Ruby [Ruby](https://www.ruby-lang.org/ja/)は世界でも有名なプログラミング言語の内の一つです。日本人の[まつもとゆきひろ(通称matz)](https://twitter.com/yukihiro_matz/status/722438096097189888)により開発され、cookpadなどのWebサービスの企業で多く用いられています。体感ですがMMAのプログラムもRubyで書かれているものが多いです。 これ以上のRubyについての説明は公式サイトの[Rubyとは](https://www.ruby-lang.org/ja/about/)を読んでみるとよいでしょう。 #### Linux/UNIX #### Windows Windowsでは、[RubyInstaller](http://rubyinstaller.org/)というツールを利用します。[この](http://rubyinstaller.org/downloads/)サイトを開いて、RubyInstallersのところにある`Ruby 2.3.0 (x64)`のリンクをクリックし、`rubyinstaller-2.3.0-x64.exe`をダウンロードして下さい。 ダウンロードが完了したら`rubyinstaller-2.3.0-x64.exe`を実行して下さい。後は出てくる表示に従ってインストールを進めて下さい。途中で下の画像の様な表示が出ますが、全てにチェックを付けて`インストール`をクリックして下さい。 ![](https://wiki.mma.club.uec.ac.jp/benevolent0505/2016ProgrammingSeminar1?action=AttachFile&do=get&target=rubyinstaller.png) インストールが完了したら *全てのプログラム* の中にある *Ruby コマンドプロンプトを開く* をクリックして下さい。クリックをすると、下の画像の様なウィンドウが表示されます。 ![](https://wiki.mma.club.uec.ac.jp/benevolent0505/2016ProgrammingSeminar1?action=AttachFile&do=get&target=command-prompt.gif) そして、このgif画像の様に `ruby -v` と打ち込んでみて下さい。画像の様な`ruby ~`の表示が出れば大丈夫です (人によってrubyの後に続く`2.2.4p230`の様な番号は違うことがあります)。 #### OS X(Mac) OS Xには標準でRubyがインストールされています。 `Finder`から`アプリケーション`の`ユーティリティ`フォルダの中の`ターミナル.app`を開いてみてください。開いたら下の画像の様なウィンドウが表示されるはずです。 ![](https://wiki.mma.club.uec.ac.jp/benevolent0505/2016ProgrammingSeminar1?action=AttachFile&do=get&target=terminal.gif) そして、このgif画像の様に `ruby -v` と打ち込んでみて下さい。画像の様な`ruby ~`の表示が出れば大丈夫です (人によってrubyの後に続く`2.2.3p173`の様な番号は違うことがあります)。 ### Atom [Atom](https://atom.io/)はテキストエディタ(エディタ)の一つです。エディタとはWindowsの*メモ帳*やOS Xの *テキストエディット* などのように、テキストファイルを作成・編集・保存するソフトウェアのことを言います。 プログラミングをする上では、極端に言えばテキストファイルの編集ができればいいので、 *メモ帳* や *テキストエディット* でもかまわないのですが、一般にプログラミングをするのに適しているエディタというものがあります。 例えばRubyのプログラムだったら ```ruby puts 'Hello, world!' puts 1 + 2 ``` のように、`puts`や`Hello, world!`, `1`や`2`のRubyのプログラムにとって特別なキーワードを色付けしてくれます(これらのキーワードの意味を今わかる必要はありません) 。この色付けによって自分が書いたプログラムが見やすくなるわけです。しかし *メモ帳* では、この様な色付けはしてくれません。 この様にプログラミングに適しているエディタは、プログラミングをする上で便利な機能を備えています。ですので、今回の講習ではAtomをインストールします。 ※現在Atom以外のテキストエディタを使っている人はそのまま使い続けてもらって問題ないです。今回の講習では特定のエディタに依存するような内容は扱わない予定です。 #### Linux/UNIX 普段からLinuxを使っている人にはエディタを勧める必要は無いかもしれませんが、一応インストール方法を説明しておきます。 DebianやRHEL系のLinuxを使っている人は、[Atomの公式ページ](https://atom.io/)のトップにある`Download .deb`,`Download .rpm`をクリックしてdebまたはrpmパッケージファイルをダウンロードしてください。あとはもうわかるでしょう。 それ以外のLinuxディストリビューションやUNIX系OSを使っている人は自分でビルドしてみて下さい(動いたらTwitterで自慢してみるといいでしょう)。 #### Windows [Atomの公式ページ](https://atom.io/)のトップにある`Download for Windows`のリンクをクリックして`AtomSetup.exe`というファイルをダウンロードしてください。 ダウンロードが完了したら、`AtomSetup.exe`を実行してください。後は出てくる表示に従えばわかると思います。 #### OS X(Mac) [Atomの公式ページ](https://atom.io/)のトップにある`Download for Mac`のリンクをクリックして`atom-mac.zip`をダウンロードしてください。 ダウンロードが完了したら、`atom-mac.zip`を[解凍](http://e-words.jp/w/%E8%A7%A3%E5%87%8D.html)して下さい。`Atom.app`というファイルが出てきます。あとは出てきた`Atom.app`を`Finder`の`アプリケーション`の中に加えれば完了です。 ## Rubyで遊んでみよう それではRubyのインストールができたので、まずはRubyで遊んでみましょう。 ### irbの起動 irbとはInteractive Rubyの略です。irbを使えば簡単にRubyのプログラムを実行することができます。それではirbを起動するためにWindowsの人はコマンドプロンプト、OS Xの人はターミナルを開きましょう。 Windowsの人はさっきと同じ様に *全てのプログラム* の中にある *Ruby コマンドプロンプトを開く* をクリックして下さい。そして今度は `irb` と打ち込んでみてください。下の画像の様なウィンドウが表示されるはずです。 ![](https://wiki.mma.club.uec.ac.jp/benevolent0505/2016ProgrammingSeminar1?action=AttachFile&do=get&target=windows-irb.png) OS Xの人もさっきと同じ様に`Finder`から`アプリケーション`の`ユーティリティ`フォルダの中の`ターミナル.app`を開いてみてください。そしてと `irb` と打ち込んでみてください。下の画像の様なウィンドウが表示されるはずです。 ![](https://wiki.mma.club.uec.ac.jp/benevolent0505/2016ProgrammingSeminar1?action=AttachFile&do=get&target=mac-irb.png) ここで立ち上げたウィンドウは一般にコンソール(端末)と呼ばれます。ですので、これから先コンソールを立ち上げてくださいと出てきたら上で書いたようなことを行ってください。 irbは `exit` と打ち込んで`Enter(Retern)`キーを押すか、 `Ctrl`キーを押しながら`d`のキーを押すと終了することができます。 ### irbで文字を表示する まずは文字を表示するプログラムから始めてみましょう。 下のプログラムを書いてみましょう。書くのは`puts 'Hello, world!'`の部分だけで大丈夫です。 ```ruby irb(main):001:0> puts 'Hello, world!' ``` 書けたら`Return(Enter)`キーを押してみて下さい。次の表示が出ます。 ``` Hello, world! => nil ``` なんだこれだけか、と思うかもしれません。ですがこれも「文字を表示する」という立派なプログラムになります。 さて、他の文字も表示してみましょう。今度は`puts "始めてのプログラミング"`と書いてみてください。 ```ruby puts "始めてのプログラミング" ``` 書けたらさっきと同じく`Return`キーを押してみて下さい。今度はこう表示されます。 ``` 始めてのプログラミング => nil ``` このプログラムについては後で詳しく解説します。今は ```ruby puts "表示したい文字" ``` のように書いて、`Return`キーを押せば文字が表示されるものだと思ってください。 さて、表示できるのはアルファベットや日本語だけではありません。例えば次のプログラムを書いてみると ```ruby puts '10' ``` ``` 10 ``` この通り数字を表示することもできます。記号はどうでしょうか。 ```ruby puts '1 + 2 = 3' ``` ``` 1 + 2 = 3 ``` このように`puts`は`"`の記号でかこんだものを表示することができます。 ### irbで簡単な計算をしてみる 今度は計算をするプログラムを書いてみましょう。次のように`1 + 1`と書いて`Return`キーを押してみてください。 ```ruby 1 + 1 ``` ``` 2 => nil ``` 結果が計算されて表示されたと思います。このプログラムの仕組みも後で解説します。今は計算式をirbに書いたら、その計算結果を表示してくれる電卓のようなものだと思って大丈夫です。 さて、他の計算もしてみましょう。 ```ruby 5 - 3 ``` ``` 2 => nil ``` かけ算は`×`の記号でなく`*`の記号を使います。 ```ruby > 5 * 5 25 ``` 割り算も`÷`の記号ではなく`/`を使って計算をします。 ```ruby 10 / 3 > 3 ``` ここで疑問を持った人もいるかもしれません。「3・・・1」じゃないのかと思ったかもしれませんが、`/`は割り算の商を計算します。 あまり(剰余)を求めるためには`%`の記号を使います。 ```ruby 10 % 3 > 1 ``` べき乗の計算は`**`の記号を使います。 ```ruby 2 ** 7 > 128 ``` 少し複雑な計算をさせてみましょう。 ```ruby (1 + 10) * 10 / 2 > 55 ``` ```ruby 9 - 3 + 3 / 1 + 1 > 10 ``` かっこでかこんだ部分が先に計算されることや、かけ算割り算が優先順位は普通の数学と同じです。このようにしてRubyで計算をさせることができます。 ### プログラムをファイルに保存する irbでいままで書いたプログラムはirbを閉じたら消えてしまいます。普通は書いたプログラムをファイルに保存して、それを実行します。 まずは作業用のディレクトリを作りましょう。どこに作っても問題ないですが、日本語のディレクトリ名が含まれている下には作らない方がいいでしょう。 僕が作るときはWindowsの場合だったら`C:\develop`に、LinuxやOS Xだったら`~/develop`を作業用ディレクトリにします。 それではテキストエディタを起動しましょう。エディタを起動したら次のプログラムを書いて作業用のディレクトリに保存しましょう。ファイル名は`hello.rb`とします。`Atom`の場合はメニューバーから`File`から`Save`を選択すると保存ができます。最後の`.rb`はRubyのファイルであることを示しています。 ```ruby puts "Hello, world!" ``` これでRubyのファイルが作れました。ではこのプログラムを実行してみましょう。 コンソールを開いて、作業用ディレクトリに移動してください。Windowsで`C:\develop`にディレクトリを作った場合は ``` cd C:\develop ``` と、OS Xで`~/develop`にディレクトリを作った場合は ``` cd ~/develop ``` と打ち込むとディレクトリを移動できます。 ディレクトリの移動ができたら、`ruby hello.rb`と打ち込んでみましょう。次のように表示されます。 ``` > ruby hello.rb Hello, world! > ``` こうしてRubyのプログラムを実行することができます。 ## 参考資料 Rubyを勉強する上での参考資料をのせておきます。 ### 書籍 * [たのしいRuby](http://www.amazon.co.jp/%E3%81%9F%E3%81%AE%E3%81%97%E3%81%84Ruby-%E7%AC%AC5%E7%89%88-%E9%AB%98%E6%A9%8B-%E5%BE%81%E7%BE%A9/dp/4797386290/ref=sr_1_1?ie=UTF8&qid=1464160586&sr=8-1&keywords=%E3%81%9F%E3%81%AE%E3%81%97%E3%81%84Ruby) * この資料を作成するのにも参考にした本です。 ### Web * [公式サイト](https://www.ruby-lang.org/ja/) * 正義 * [Rubyリファレンスマニュアル](http://docs.ruby-lang.org/ja/2.3.0/doc/index.html) * Rubyのドキュメントです。文法や標準ライブラリの説明がのっています。