Ototoの日記

プログラミングについてや、日々の私生活で思っていることを書いて行きます

Ruby on Railsを勉強するとっかかりPart 1(環境設定まで)

はじめに

何かしらのWebサービスを作成するため、プログラミング未経験者でRuby on Railsを勉強しようと思っている人へ、どうやって学習を始めたら良いか、全体像をつかみ、開発環境(mac)を整える記事です。かなりざっくりです。詳しくはリンク先で調べてね、という感じです。 ちょっと興味があって調べたことがあるけど、挫折したという人にも読んでもらえると嬉しいです。

そもそもプログラミング未経験者がいきなりRuby on Railsを勉強するのが良いのかについては両論賛否ありますがここでは置いていきます。

Ruby on Railsチュートリアルを進めていくのがオススメなので、こちらの勉強に手をつけられるようにするのが目標です。チュートリアルを進めていくとTwitterクローンを作ることができます。

この記事は分割して、以下の通りに進めていこうと思います。

  1. 環境設定する
  2. Ruby on Railsを動かしてみる
  3. Webサービスとはどのように構成されているか概要をつかむ
  4. Rubyを使ったプログラミングを勉強する
  5. HTML,CSSを勉強する

Rubyとは

Rubyとは、まつもとひろゆきさんが設計されているプログラミング言語です。開発者が日本人なこともあり、日本語の資料が比較的多いです。プログラミング言語には、ほかにはPythonJavaなどたくさんあり、目的や好みに応じて使い分けます。

Ruby on Railsとは

Ruby on Rails,略してRailsとよく呼びます。Railsruby言語で作られ、Rubyで使用できるフレームワークです。なぜフレームワークが、なぜRailsというものが存在するのか、根源的には車輪の再発明をしないためです。先人の知恵を拝借するためです。これ以上は実際に手を動かしてみて理解するのが良いと思います。

Macでプログラミングをする

Web系のエンジニアにはMacでプログラミングしている人が多いですよね。実はスタバでドヤするためだけではないんです。MacWebサービスを動かしているサーバーに似ていて便利なのです。Windowsは似ていない。だからMacを使うのです。もちろんただMacが好きだから使う人もいます。私もそうです。Windowsで動いているサーバーもあります。その場合はWindowsでプログラミングをした方が便利です。

ターミナル

Macでプログラミングをする場合には主にターミナルを使います。使っていくうちに覚えると思いますが、基本的なコマンドは覚えて置いたほうが便利でしょう。よく見る黒い画面の一つはこれですね。

環境設定

プログラミングを勉強するには、プログラミングをできるように、Macを設定する必要があります。近年ではクラウド上でプログラミングできるサービス(参考)もありますのでこちらを使う場合は不要ですが、勉強のためには自分のMacで開発環境を整えた方が良いと思います。詰まってしまって先に進めないようなってしまったら上記のサービスを使うのもアリかと思います。

ここではRuby on Railsを使うようにするために、Homebrew,rbenvをインストールして使います。その後rbenvを使ってrubyをインストールし、railsをインストールします。

Homebrewはパッケージ管理システムです。平たく言えば、AppStoreみたいなものです。AppStoreがアプリを管理するように、パッケージを管理します。(何がダウンロード済みか、バージョンはいくらかを管理しアップデートしたりします) パッケージの一つであるrbenvをHomebrewを使ってインストールします。

rbenvはrubyのバージョンを管理するためのツールです。例えば今バージョン2.0.0のrubyを使っていて、新しくバージョンを2.1.0にしたい、しかしバージョンをあげると不具合が起きる可能性もあるのでダメだった場合2.0.0にすぐに戻したい、という時に役に立ちます。 他には例えば、二つのプロジェクトを掛け持ちしていて、プロジェクトAではrubyのバージョン2.1.0を使っているが、プロジェクトBではrubyのバージョン2.2.0を使っている、しかしMacは1台しかない、という時にプロジェクトごとに簡単に2つのバージョンを切り替えて使うことができます。ミスって違うバージョンをインストールしてしまった、というときも簡単に元に戻せて便利です。

早速インストールしてみましょう。下記の記事のどれかを参考にしてみてください Homebrew rbenv ruby などで検索するとインストールの方法が引っかかると思いますのでそちらを参考にしていただいて構いません。

Homebrew,rbenvがインストールできるところまでやれば大丈夫です。

$ rbenv --version

とターミナルに入力し、バージョンが表示されれば正しくインストールできています。 ($は要りません)

$ rbenv install -l

とすると、インストール可能なバージョン一覧が出てくるので、新しいものをインストールしましょう。例えば2.3.3をインストールする時には

$ rbenv install 2.3.3

とします。 ここまでやっておいてですが、実はRubyは元々Macに入っています。それを使うことも可能です。しかし、元々入っているものはMacのシステムも使っているため、簡単にversionをあげたりすることが難しいです。なのでrbenvを使います。

$ rbenv versions

と打つと、

$ rbenv versions
* system (set by /usr/local/var/rbenv/version)
  2.3.3

のように表示されます。rbenvによりインストールされてた2.3.3と元々入っているsystemがありますね。現状は*が付いているsystemが選択されているため、2.3.3を使うようにします。

$ rbenv global 2.3.3

とすると2.3.3を使えるようになります。

$ ruby -v

とするとRubyのバージョンを確認できます。2.3.3になっていれば成功です。

エラーなどが出て、ここまでできなかった方、「自分には向いていないんだな」とは思わないでください。エラーやらwarningやらしょっちゅう出ます。環境設定だけで半日潰した、なんてことも実際の開発の現場でも起こります。 できなければ

  • 別の記事を参考に、別の方法、手順でやってみる
  • 自分の打ち間違いなどあるかもしれないのでもう一度最初からやってみる
  • エラーの内容読む、エラーの内容をコピーしてGoogle検索してみる

のような方法を取ってみてください。

それでもできない場合はできる人に聞いてみてください。環境設定でハマることはよくあることなので、これで絶対「自分には向いていないんだな」とは思わないでください。

次はRuby on Railsチュートリアルの序盤、動かしてみるところまで手をつけてみましょう。

POSIX原理主義

POSIX原理主義というものがあると聞いた。

http://richlab.hatenablog.com

彼らが抱えている問題意識は、書いたプログラムが時代が流れることに動かなくなっていくということらしい。 確かに、OSのversion upだ、言語のversion upだと行われて行くと、次第にプログラムは動かなくなっていく。

そこで、unixで使われていて、長らく変わっていないPOSIXのみに準拠してプログラムをかけば、ずっとこの先も動き続けることができる。

とのことのようです。 確かに、言わんとすることはわかり、応援したいが、すぐには手を出しづらい。。

Amazon AI (Amazon Polly/Amazon Rekognition/Amazon Lex)

講師:川村誠

Amazon AIのWebinarを受講した。 AmazonのAI Servicesである

  • Polly-テキスト音声変換
  • Recognition-画像識別、認識
  • Lex-Bot構築

の説明があった。 ユースケースに合えば、自前で開発する必要がないので便利

以下メモ

  • AI Servies
  • 昨年のre:Inventで発表
  • AI Platforms
    • AMR,EMR,Spark & Spark ML

Polly

  • テキストを音声に変換するサービス
  • 生成された音声の保存とリプレイ、配信が可能
  • 日本語含む24の言語をサポート
  • 品質

    • デモ
    • 「庭には二羽の鶏がいる」も自然なイントネーションで発音
  • SSML(Speech Synthesis Markup Language)

    • 音声の様々な要素をカスタム可能
    • 発音、ボリューム、話す速度など
  • レキシコン(Pronunciation Lexicon Specification)

    • 単語とフレーズのマッピングや言語でいっぱん的で無い単語の発話
    • デモ
      • jの発音のカスタマイズ
      • W3Cを正式名称で
  • ユースケース

    • 記事を音声に変換してmp3でダウンロード
  • 料金、制限事項

    • 最大1500課金対象文字
    • 最大5個のレキシコン
    • outputは5分に限定
    • 100文字あたり4.0USD
    • 1ヶ月あたり500万文字1年間無料

Amazon Recognition

  • 深層学習に基づく画像認識サービス
  • 画像の分析機能をアプリケーションに簡単に追加できる
  • 物体とシーンの検出、顔分析、顔照合、顔認識

  • 物体とシーンの検出ーDetectLables API

    • 画像中の物体やシーンを検出
    • 識別結果を信頼値0-100の値
    • ユースケース
      • 不動産物件の検索
  • 顔分析機能ーDetectFaces API
    • 画像内の顔の位置を検出し、感情、ポーズ、瞳が開いているかどうかの顔属性を分析できる
    • ユースケース
      • 店舗内の顧客印象分析
  • 顔の比較機能 CompareFaces API
    • 二つの画像の顔が同一人物であるか、可能性を判定
    • ユースケース
      • 社員証の顔画像とカメラでの顔画像を照合したセキュリティ
  • 顔認識機能 IndexFaces/SearchFacesByImage API
    • 大規模な顔のコレクションの中から似た顔を持つ画像を検索することができる
    • 顔が検出され、切り出される。その顔がベクトル化され保存
    • SearchFacesByImage APIで近傍探索
    • ユースケース
      • 友人の画像を見つける
  • Lambdaとシームレスに連携、ブループリントも利用可能

    • S3に写真がputされたことをトリガーに呼び出し
  • 1か月5000枚の画像分析12週間無料

Amazon Lex

  • 音声やテキストを使用して、任意のアプリケーションに対話型インターフェイス(ボット)を構築するサービス
  • 現在はLimited Preview
  • 自動音声認識自然言語理解を利用可能
  • Facebook messagerなどに簡単にパブリッシュ
  • バージョン管理とバージョンに関するAlias設定機能を提供
  • Utterance
    • 会話を始めるフレーズ。正確にintentを起動
  • Slot
    • 必要な変数
  • Prompt
    • 変数を聞き出し制度を上げるための質問
  • Fulfillment
    • intentが必要とするSlotが揃った時に呼び出す実行内容
  • 音声リクエスト1件あたり0.004USD
  • テキストリクエスト1件あたり0.00075USD

AWS BlackBelt 動画配信 Summary

AWS webinarであるBlackBeltの動画配信を受講したのでまとめ 動画配信については全く知識が無い状態でのメモです。 Elemental Cloudが優秀そう。

  • オンデマンド配信

  • ライブ配信

    • リアルタイムに配信されているものを見る

動画配信における技術動向

最近のトレンド

  • マルチデバイス  
  • クライアントデバイス毎に対応
  • マルチキャパシティ
    • どれぐらいのアクセスがくるかわからない 
    • ライブなどはどれくらくるかわからない
    • 話題になると急にアクセスが増える

バイスごとに異なるフォーマットに対応する

  • サーバーサイドに下記ツールを導入する方法
    • wowza,
    • Adobe media server
    • unified streaming
    • elemental cloud

サービスとしてすでに提供されている EC2にインストールして使用もできる

  • クライアントでフォーマットを統一する方法
    • JWPlayer, VIDEO.JS, flow player

おすすめの構成

  • S3,CloudFlontにHLSで動画を置く

  • コンテンツの数、サイズの増加に対応する

    • S3, Elastic Transcoderを使用

AWSを使えば従量課金 CloudFrontの利用を推奨

求められる基盤要件

  • オンデマンド
    • 安定
  • ライブ配信
    • イベント時のみ
    • 想定できない規模の配信に耐えられるキャパシティ

PaaS型配信サービス

  • Elemental could
    • 従量課金
    • 全てGUI
    • オートスケール
    • ライブ、オンデマンド両方
    • S3watch機能
    • 広告を挟む機能
    • DRMライセンスの機能

コスト試算

aws.amazon.com/jp/cdp/cdn-live

セキュア、プレミアム課金

  • CloudFrontの署名付きCookieを利用したアクセス制御
    • CloudFrontが正しい署名を持っているかチェック
    • SSLも使える
    • オンデマンド、ライブ両方
  • Elastic Transcoderの暗号化機能と組み合わせたコンテンツの保護
    • KMSと連携し映像自身も暗号化
  • DRMを利用したセキュア配信
    • WOOZAなどでSaaSDRM(BUYDRMなど)と連携
    • 一般的に数十万人のユーザーがいないとPAYできない

ライブ配信環境の冗長化 

大量のユーザーがいるのであればELB,ALBはボトルネックになる可能性があるので出来る限り使わない

最後に、

あとはMpeg-DASHにどうなっていくか

Clientのプレイヤーがあまり無い javascriptベースのプレイヤーもまだ安定していない

4K配信は? Elemental cloudは4K対応している

情報の集まるところ

Androidの創設者、アンディルービンは数年前Googleを退職し、Playground Global(以下プレイグランド)という会社を設立した。 WIREDの記事によるとプレイグラウンドの目標は以下のよう。

プレイグラウンドの目標は、ただ単に機器の開発や会社の設立を行うことではなく、それをはるかに超えたところにある。ルービンはプレイグラウンドを、来るべきAI社会に必要な「標準建築ブロックの製造工場」、すなわち、ハードウェアやソフトウェアの部品補給庫にしたいと考えている。 そしてそのプラットフォームをオープンにすることで、彼と一緒に働いている企業だけでなく、誰もがスマートデヴァイスを開発できるようにしたいのだ。もしそれが成功すれば、ある共通の技術的インフラが無数のデヴァイスを動かし、起業家たちは、スマートドローンやスマートハウス、本格的なロボットを開発する能力を手にすることになる。プレイグラウンドは、かつてAndroidスマートフォンに与えたのと同じようなインパクトを、それらスマートマシンの開発に与えることだろう。 会社? いや、プレイグラウンドだ! Androidの生みの親がつくる「会社を超える会社」 « WIRED.jp

スマートデバイスを開発するベンチャー企業に対しインキュベーションやコンサルティング行ったり、標準化されたソフトウェア、ハードウェアの部品を供給することを目標にしているようだ。 そして読み進めていくと以下のようにも書いてある。

もしこれが実現すれば、ルービンの会社は2つの点で恩恵を得る。1つには、商品化を目指す起業家の多くはプレイグラウンドに協力を求めるため、早い段階で投資する機会が得られるということがある。そしてより重要なのは、彼らの新製品の心臓部に、プレイグラウンドの技術が埋め込まれるということだ。かつてWindowsがPCに対して、あるいは、Androidスマートフォンに対して行ったのと同じように、無数の機器に使われる共通インフラを提供することこそ、プレイグラウンドの最大の狙いである。

この文章を読んだ時、ソフトバンク孫社長のことを思い出した。

ソフトバンク孫正義は、去年ARMを買収。ARMは半導体の設計情報をライセンスするビジネスを行っていて、ARMをベースとしたCPUは、スマートフォンなどほとんど(およそ90%以上)モバイルデバイスの核として使用されている。圧倒的なARMのシェアを背景に、ARMには今後どの会社がどのようなモバイルデバイスを作成しようとしているか、という情報が集まってくる。ARM買収の目的は公表されていないが、この情報を得るのが最も大きな目的の一つだと言われている。

孫社長は以前にも似たような戦略をとっている。まだソフトバンクが小さい会社だった頃、コンピュータ展示会コムデックスをおよそ800億円で買収。コムデックス自体では大きな利益を上げられなかったものの、展示会に出入りするIT企業と顔なじみになり、交流を深めることで、Yahooを発掘した。

以上の話に共通するものは、情報の集まるプラットフォームを握ることにより、今後どの業界が伸びるが、どのようなビジネスが伸びようとしているのか情報集まってくるので、次の行動の成功確率が上がるというものだ。

自分の人生やキャリアプランについても以上のようなことを考えている。優秀な人が集まり、最先端の情報が集まるところに身を置き、的確な選択をできるようにしたいと思う。

今年の目標

今年の目標は

  • 資産運用する
  • ブログ、Qiita記事をたくさん書く
  • 機会学習を勉強する
  • 自分でアプリを作る

資産運用する

現状資産はほぼ全て日本円で持ってしまっているので、分散投資したい 戦略としては、

会社の401k 新興国株式にする

そのほか資産を100とすると 日本株40 円現金20 米国株20 ドル定期20

というのを考えています。(大体の妄想)

ブログ、Qiita記事をたくさん書く

何かを発信していく、ということに今年は力を入れていきたいと思います。 今まで、勉強したり、ぼんやり考えたりしていても、実際に行動に移すということがなかなかできていなかったので今年は意識してやりたいですね。

  • 初心者がRailsを学ぶ上で参考になること
  • 仕事をする上で身につけた豆知識
  • 日々考えていること

を主に書いていこうと思います。

Qiitaのアカウントはこちら http://qiita.com/otoan

機会学習を勉強する

仕事にも関わってくるのですが、今年は機械学習を使ったプロダクトを作りたい。

自分でアプリを作る

仕事の関係でRailsなどWeb系やアプリ系とは少し離れてしまうので、自分で何かプロダクトを作って忘れないようにしたい。 もちろん、自分で何かのプロダクトを一から考えて、誰かに使ってもらえるところまで行きたい

ブログを書いてみるテスト

はじめてはてなにブログを書きます。

Ototoです。

関東のメーカーでソフトウェアエンジニアをしています。

プログラミングなどの技術的なことや、普段考えていることを書いていこうと思います。

あまり使い慣れていないのですがMarkdownで書いていきたいと思います。

Markdown - Wikipedia

Markdownを使うと、文章の先頭に#をつけるだけで見出しになったり、*をつけるだけで箇条書きになったりと、メモを取る要領で書いていたら勝手に記事になる感じで使えるので便利です。