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