メタプログラミングRubyを読む
はじめに
これからメタプログラミングRubyを読んでわかったことをまとめていきます。
編集方針(随時更新)
- 基礎的なこともまとめる。 オライリー特有の「わかっているだろ?」的記述を出来る限り自分の 中で噛み砕いて説明
wgetコマンド使い方
wgetとは
ウェブページからコンテンツをダウンロードする際に利用します。 よくある利用例としてはウェブサイトのページをダウンロードしたり、 画像を取得したりします。
使用方法
Macから使うにはwgetコマンドをインストールする必要があります。
$ brew install wget
して下さい!
ウェブページ保存方法
$ wget http://www.yahoo.co.jp #yahoo 取得
ファイル名を指定するには
-O オプションを使う
$ wget http://www.yahoo.co.jp -O yahoo.html #yahoo 取得
特定のファイルを保存するには
-i オプションを使う
$ wget -i *.gif http://www.yahoo.co.jp -i *.gif #yahoo 取得
簡単ですが、以上となります。
サーバーコマンド
サーバー利用
先日、サーバーを利用したので、その際に用いた コマンド及び、(これから使うであろう)コマンドを 備忘録として残しておきます。
Topコマンド
Topコマンドを用いると、システム全体の負荷・メモリ稼働状況が 把握出来るようです。 以下にコマンド例を記載します。
$top #CPU順にソート $top -a (shift + m) #メモリ順にソート
その他、有益と思われるコマンド
df #ディスクの空き容量を把握 free #メモリの空き容量
サーバーについては勉強中なので、継続して更新していきます。
新しいファイルを何個も作るには
UNIXコマンドでファイル作成
僕は新しいファイルを作る際、GUIを通じて行っていました。
普段使う際は問題ないのですが、大量のファイルが必要なときは問題になりますね。 例えば1〜99のjsonファイルを作る際にはいちいち、マウスを使って作るのは非効率ですね。 なんで、備忘録としてUNIXコマンドで出来るファイル作成方法をまとめておきます。
例① 1.json作成
$ touch 1.json
連番も出来るみたいです。
例② 1.txt、2.txt作成
$ touch {1..2}.txt
もっと複雑にしたい場合はrubyなどのプログラミング言語 を使ったほうが良さそうです。 その場合は ダブルクオートを使って制御すればOKです。
count = 0 10.times{ if count % 2 == 0 `touch #{count}.json ` else `touch #{count}.txt ` end count += 1 }
Curlコマンド
はじめに
Curlコマンドを少し勉強しましたのでブログで整理を行っていきます。
HTTPアクセス
本題に入る前にHTTPについて整理を行ったほうが通りが良いので整理してます。 HTTPとはWebサーバーとWebブラウザなどのクライアントがデータを送受信する際のルール(取り決め)です。
つまり、HTTPアクセスとはWebサーバーとブラウザなどがHTTPでデータ送受信を行うことを示します。
ちなみにHTTPSはHTTP Over SSL/TLSの略で、暗号化をしてデータの送受信を行うことを意味しています。 HTTPSのおかげでデータを悪用されないため、安心して(?)ネットショッピングなどが行えます。
Curlコマンドとは何か
本題に戻ります。まずは言葉の定義から説明致します。 CurlとはClient for URLの略で 「URLで示される場所からデータを様々なプロトコル(HTTPなど)を用いて送受信することができるプログラムおよびコマンド」を意味しています。
具体的に言うと、コマンド上で、特定のURLに紐付いたファイルのダウンロードを行ったりすることが出来ます。
ターミナルからソフトインストールを行う際、Curl〜といった言葉が出てくることがあります。 あれはHTTPリクエストによりインストールするファイルをダウンロードしているんです。
実践してみる
前回作ったSinatra GETをCurlコマンドを用いて実行してみます。
まずは前回実行したファイルをローカルで立ち上げます。 curlコマンドでのGET、POSTは簡単です。 ターミナルで「curl」+ URLを書けばOKです。以下に実行例を記載します。
$curl http://localhost:4567/form?get_name=test
実行例
コマンドプロンプトからCURL、URLを打たなくても、Google ChromeからCURLコマンドを取得することも出来ます。
Sinatraに出会った
初体験
先日Sinatraというフレームワークを触ってみたので頭の整理がてらカキコします。
Sinatraとは
Rubyのフレームワークです。フレームワーク ≒ Railsと捉えられやすいですが、 SintraもRuby界では有名なようですね(失礼!)
第一印象
「え、これってフレームワークなんですか??」っていうぐらいの簡素です。 Sinatra公式とRails公式を比較すると、 非常に簡素なのがわかりますね!
Sinatraの魅力は簡素なため、しっかりと理解しないと コードがかけないという利点(苦笑)があります。
以下ではSinatraを題材にして紹介を行っていきます。 環境設定はググるといっぱいあるので、説明は割愛します!
ビューの表示方法
Sinatraはルーティングが非常に大切です。
Railsでもありますが、 ルーティングとは HTTPメソッドとURLマッチングパターン(パス) が一致した際に行うアクションを規定したものです。
ルーティングは以下のような形で記述します。
get / do #getメソッドパスは「/」 処理 end
※HTTPメソッドとはクライアント(ブラウザ)が行いたいアクション (Get、Postなど)をサーバーに伝えることです。
※URLマッチングパターンとあるように正規表現を使ったり、 ワイルドカードを使うことも出来ます。
※ルーティングには2つの記述方法があるようですが、 シンプルなクラシックスタイルで記述しています。
HTTP GETメソッド 個人メモ
yahoo.co.jpをみたいとしたらchrome(もしくはIE、もしくはFireFoxもしくはsafari)さんにhttp://www.yahoo.co.jp と入力し、「enter」を押します。
これはブラウザを通して、GETメソッドとしてサーバー側にリソースの取得をお願いしていることです。 で、ブラウザ上でホームページが見れるのはサーバーさんがビュー表示をブラウザさんに返しているということ。
Hello World
手軽なものを実行してみます。
hello-world.rb
require 'sinatra' get '/' do erb :hello end
順に説明します。
require 'sinatra'
と記述することでHTTPメソッドが使える+実行すると、Webrick実行(サーバー立ち上げ)してくれます。
get '/' do erb :hello end
クライアント側が/method get(リソースの取得リクエスト)を 行った際のアクションを記述しています。 上記は / のアクセスをした際にerb形式のhello.erb(シンボルで表記するので「:」を付け加える)を出力しろと記述しています。
./view/hello.erb
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>hello</title> </head> <body> hello sinatra </body> </html>
実行は当該ディレクトリで
ruby hello.rb
するだけでサーバー(Webrick)
が立ち上がります!
実行結果
get、post(Params)
次にget、postメソッドを使ってみます
form.rb
post '/form' do @post_name = params[:post_name] erb :form end get '/form?:get_name?' do @get_name = params[:get_name] erb :form end
get、post形式で、パラメータを渡す際はparamsで受け渡しが行われます。 Railsでもおなじみですね。
view(抜粋)ですが、以下のようにしときます。
./view/form.erb
<h1>シナトラ</h1> <form action="" method="post">ポスト <input type="text" name = "post_name"> <input type="submit"> </form> <form action="" method="get">ゲット <input type="text" name="get_name"> <input type="submit"> </form> <% if @get_name %> <div> ゲットしました。<br> こんにちわ<br> <%= @get_name %>さん </div> <% elsif @post_name %> <div> ポストしました。<br> こんにちわ<br> <%= @post_name %>さん </div> <% end %>
ビューにはform.rbで定義されたインスタンス変数が渡されます。
実行結果
最後に
ここでは紹介しませんでしたが、rubyの代表的なDB Gemである 「Active Record」 も使いました。今回Sinatraを使うことでDB、ビューの理解が非常に理解が進み、感動しました。
というのも、
ここ一ヶ月 Railsを勉強してなんというか
サービス作るには Rails new して、DB作るには、Rails generate ・・・っていう風に
「コマンドゲー」 ぽい感じで作業していて、 プログラミングに対するモチベーションが 下がっていく一方だったんです。 それもこれも僕が初心者なんで、理解が不十分なまま、使っていたのが起因なんですがm( )m
そんな状況下でSinatraを触ってコードを書いていくと「受け身」にならずに「能動的」にコードを書く事が出来て理解が進むと同時にプログラミングを楽しむことが出来ました。
これからも、gemの試しなどSinatraを積極的に利用していこうと思います!
JSON
先日、JSONを扱う機会がありました。 復習も兼ねて定義及びRubyのコード例を元に頭の整理をしていきます。
JSONとは
まず、恒例の「定義通り」の説明をします。 JSONとはJavaScript Object Notationの略です。 テキストベースのデータフォーマットで 多くのプログラム言語でカバーされているため、 ブラウザ(JS)−サーバー(PHP、Pythonなど)間でのデータ交換において 使われ、記述が容易(後述)なのでメジャーなデータ・フォーマットです。
表記方法
方法は2つあります。
1つ目が「配列型」 JSON例①
["python", "Ruby", "HTML"]
2つ目が「オブジェクト型」 JSON例②
{"gsacademy":"プログラミング学校","プログラミング経験": "ruby"}
またオブジェクト型の中に配列を入れ子にするとことも出来ます。 ここでは紹介しませんが逆も行えます。ここでは「入れ子型」 とでも名づけておきます。
JSON例③ 「入れ子型」
{"gsacademy":"プログラミング学校","学生番号":"18", "プログラム経験":[{"Ruby":"1ヶ月"},{"Python":"3ヶ月"}]}
JSONに入れられる値の型はboolean,string,number等が入るので特に意識せず使えそうです。
使用方法
一般的なサーバー言語ではJSONフォーマットのまま、使用 出来ないため、一回各言語のフォーマット形式に合わせた配列、連想配列へ変換して使用します。
JSON例
JSONデータをRuby用に変換(パースと呼ぶ)を行うには JSONモジュールにある parse (もしくは load ) を用います。
require 'json' data_json = '{"gsacademy":"プログラミング学校","プログラム経験":"ruby"}' #オブジェクト型 data_json2 = '["gsacademy","学生番号","プログラム経験","ruby"]' #配列型 #入れ子型 data_json3 = '{"gsacademy":"プログラミング学校","学生番号":"18", "プログラム経験":[{"Ruby":"1ヶ月"},{"Python":"3ヶ月"}], "好きなFW":[{"Ruby":"SinatraとRailsしか知りません。。。"},{"Javascript":"riot"}]}' print data1["gsacademy"].to_s + "\n" #出力->プログラミング学校 print data2[3] + "\n" #出力->ruby print data3["好きなFW"][0]["Ruby"] #出力-> SinatraとRailsしか知りません。。。
Python
ptyhonの例は以下となります。
Pythonも勉強しよー
では。