この記事を書いた人
machida

先日、株式会社シロクロさんでやったハッカソンでお世話になったsatococoaさんが主催の「デザイナー向けプログラム部」というものが発足されたようで、これは僕も応援せねば、とサイトのデザインをテロさせていただきました。

snapshot.png

いつもはエンジニア向けのサイトばっかり作ってるのですが、今回はデザイナー向け。シュッとした、いつもとは全然違うデザインを作らせていただきました。

システムは例によってLokka。サーバはもちろんHerokuです。やっぱりHerokuは維持費がかからないので、非営利な団体のサイトにはぴったりですね。デザイナー向けプログラム部に参加されてるデザイナの皆さんにもLokkaをガンガン使ってくれると嬉しいです。

勝手な希望

デザインテロついでに、デザイナー向けプログラム部に僕の勝手な希望を書いておきます。

やっぱりデザイナもプログラムの知識って大事だと思います。なので、僕もデザイナー向けプログラム部に参加させていただきました。なぜそれが大事なのかっていうと、デザイナは綺麗な見た目のものだけを納品するのが仕事ではなく、UX、UIの専門家にならないといけない、そのためにはプログラムの知識は必須である、っていうのが僕の意見です。だから、デザインも出来てプログラムも出来ると仕事が広がる、単価が上がる、といった安い何でも屋を育てるのではなくて、よりよいものを効率よく作るために貢献できるデザイナを育てるためにプログラムを勉強する団体になったらいいなー、というのが僕の勝手な希望です。

satococoaさん、デザイナー向けプログラム部の活動、期待してます!

この記事を書いた人
machida

なんか、Herokuの何かが変わったみたいで、最後のDBのセットアップのコマンドが、

$ heroku rake db:set

から、

$ heroku rake db:setup

に変わりました。

最初からの手順を書くと、

$ gem install heroku bundler
$ git clone git://github.com/komagata/lokka.git
$ cd lokka
$ heroku create mysite-by-lokka(ここは好きな名前で)
$ git push heroku master
$ heroku rake db:setup

...と、なります。

この変更を知らないと、はまってしまうので要注意。

この記事を書いた人
machida

HerokuのデフォルトのRubyのバージョンが1.9.2になった

HerokuのデフォルトのRubyのバージョンが1.9.2になりました。なら、このサイトKUROIGAMENではHerokuばっかり使ってるし、それに合わせてローカルのRubyもデフォルトを1.9.2にしておいた方がよさそう。今回はその作業。

RubyのバージョンといえばRVMの出番。RVMのインストール方法と、Ruby1.9.2のインストール方法はこちら

ついでにRVMの導入方法をおさらい

結構面倒なRVMの導入。手順をおさらいをしておきます。RVMの導入が済んでる方は飛ばしてください。

まずはcurlでインストール。

$ bash < <( curl http://rvm.beginrescueend.com/releases/rvm-install-head )

次に、

 [[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"  # This loads RVM into a shell session.

を「.bash_profile」にコピペ。

「.bash_profile」の場所は「Users」の下の自分のユーザーホームディレクトリ。もし、「.bash_profile」というファイルがなかったら作っちゃえば大丈夫。

ないなら作ってしまえ

次に、黒い画面(ターミナル)を一旦閉じて開き直せば完了。

ローカルのRubyのバージョンを1.9.2にする

RVMでRubyのバージョン1.9.2を使うときは、

$ rvm use 1.9.2

というコマンドを打ちますが、今回はこのコマンドに「--default」をくっつけます。そうすると、ローカルで使うRubyのデフォルトが1.9,2になります。

$ rvm use 1.9.2 --default

ターミナル — bash — 80×24

やってみたら失敗。あれ?

今のMacにRuby1.9.2を入れてなかった!そういえば前にPhotoshopが落ちる症状に遭い、仕方なくMacをクリーンインストールしたのですが、それからRuby1.9.2を入れてなかったみたい。

せっかくなので、Ruby1.9.2のインストールのおさらい。とは言っても...

$ rvm install ruby-1.9.2

と、打つだけ。インストールには結構時間がかかります。

ターミナル — bash — 80×24

#complete って出たので成功。では、もう一度、

$ rvm use 1.9.2 --default

ターミナル — bash — 67×24

これで、ローカルのデフォルトのRubyのバージョンが1.9.2になりました。

この記事を書いた人
machida

KRAYさんのブログの大人気記事「1時間でツイッターサービスを作ろう!」にデザイナーも挑戦してみようという今回の企画、「デザイナーも1時間でツイッターサービスを作ろう」いよいよ今回が最終回です。

今回は機能を実装してHerokuにデプロイ。Herokuにデプロイは今まで散々やってきましたが、Railsに機能を実装するのは初挑戦。今回は深いことは考えず、記事をひたすら記事をなぞっていきます。この後、ゆっくり本でも買ってRailsの勉強をしたとき、今回の経験が役に立てば、くらいの感じでやっていきたいと思います。

偉大なるHelloWorldボタンの実装

ボタンを押すと「偉大なるHelloWorld」というつぶやきができる機能の実装。いよいよプログラミングがさっぱりの僕にとって厳しい領域。…というわけで元記事にあるまま進みます。

$ script/generate controller messages index

ターミナル — bash — 80×24

ここで、コントローラとビューのファイルが生成されるのですが、

コントローラとは、ユーザの入力(通常イベントとして通知される)に対して応答し、それを処理する要素である(by wikipedia)、とのことで、ボタンを押したときの動きなんかを設定するファイルだと思われます。

ビューとは見た目のテンプレート部分みたいなもので、WordPressで言うところのThemeみたいなものです。余談ですが、Railsアプリでデザインを入れる仕事をやるとき、デザイナーの僕はここばっかり触ってます。

      exists  app/controllers/
      exists  app/helpers/
      create  app/views/messages
      exists  test/functional/
      create  test/unit/helpers/
      create  app/controllers/messages_controller.rb
      create  test/functional/messages_controller_test.rb
      create  app/helpers/messages_helper.rb
      create  test/unit/helpers/messages_helper_test.rb
      create  app/views/messages/index.html.erb

こんなメッセージが表示されました。「create」は「作る」という意味ですが、「exists」は?というと、「存在する」という意味です。「exists」の方は無ければ作ったけど最初からあったよ、っていうメッセージですね。まぁ、これだけのファイルが生成されたということです。

続いてURLのパスの設定。今回はページ遷移なしの1ページだけのシンプルなWebアプリなので、「/」のときに表示されるファイルの設定だけ。元記事に書いてあるまま、「config/routes.rb」を編集。

config

ActionController::Routing::Routes.draw do |map|
  # ここから追加
  map.resources :messages,:only => [:index, :create]
  map.root :controller => 'messages', :action => 'index'
  # ここまで追加
end

書いてあるまま、

routes.rb-1

routes.rb

に、中身を上書き。

アプリケーションに設定されたURLパスを確認

では、ちゃんと設定されているかの確認。元記事にあるままコマンドを打ってみます。

rake routes

こう出たらOK。

         login        /login                  {:action=>"new", :controller=>"sessions"}
        logout        /logout                 {:action=>"destroy", :controller=>"sessions"}
   new_session GET    /session/new(.:format)  {:action=>"new", :controller=>"sessions"}
  edit_session GET    /session/edit(.:format) {:action=>"edit", :controller=>"sessions"}
       session GET    /session(.:format)      {:action=>"show", :controller=>"sessions"}
               PUT    /session(.:format)      {:action=>"update", :controller=>"sessions"}
               DELETE /session(.:format)      {:action=>"destroy", :controller=>"sessions"}
               POST   /session(.:format)      {:action=>"create", :controller=>"sessions"}
oauth_callback        /oauth_callback         {:action=>"oauth_callback", :controller=>"sessions"}
      messages GET    /messages(.:format)     {:action=>"index", :controller=>"messages"}
               POST   /messages(.:format)     {:action=>"create", :controller=>"messages"}
          root        /                       {:action=>"index", :controller=>"messages"}

ターミナル — bash — 91×27

出来た!

加えて、「/login」や「/logout」というパスが存在していますね。これらはtwitter-authプラグインが自動生成してくれているパスで、「/login」にアクセスするだけで、ツイッターのOAuth認証を実行できるようになっています。便利ですね。

なるほど、前回苦労して入れた twitter-auth が twitter 認証などの面倒な処理のプログラムを自動で作ってくれたんですね。

コントローラーの処理を実装

app/controllers/messages_controller.rbを編集します。

controllers

元記事にあるまま、

class MessagesController < ApplicationController
  def index
  end
  # ここから追加
  def create
    if current_user.twitter.post('/statuses/update.json', :status => "偉大なるHelloWorld")
      flash[:success] = "おめでとう!偉大なるHelloWorldは成功した。"
      redirect_to root_path
    else
      flash[:error] = "残念だが、偉大なるHelloWorldは失敗に終わった。"
      render :action => 'index'
    end
  end
  # ここまで追加
end

を記入します。

messages_controller.rb

今気づいたんですが、今回はKodというエディターを使っているのですが、このエディター、背景が黒いのでターミナルと混同しそうですね。ブログの記事には向かないです。ちょっと失敗でした。

さて、今コピペしたところを見てみると、「偉大なるHelloWorld」という文字列がTwitterにpostされて、「おめでとう!偉大なるHelloWorldは成功した。」というメッセージが表示される。エラーが起きると、「残念だが、偉大なるHelloWorldは失敗に終わった。」というメッセージが表示される。というのが何となくわかりますね。完成したら、次はこのメッセージを変えてみるのも面白そうです。

ビュー(app/views/messages/index.html.erb)の編集

では、次は「view」の編集です。ここは僕がいつもRailsの仕事で触ってるファイル。ブラウザでアクセスしたときにユーザーが見る、見た目の部分です。Railsでは「public」フォルダにjavascriptや画像ファイル、cssファイルがあるので、Railsの仕事を受けたデザイナーは、これからいじる「view」と「public」が自分の領域になります。

では元記事の通りにやってみましょう。

<% if logged_in? %>
  <% form_tag messages_path do %>
    <%= submit_tag '偉大なるHelloWorldをツイートする' %>
  <% end %>
<% else %>
  <%= link_to 'ログインする', login_path %>
<% end %>

これを「app/views/messages/index.html.erb」にコピペ。

messages

エディターを「mi」に変えてみました。

index.html.erb

全体のレイアウトファイル(app/views/layouts/application.html.erb)を作成

次の作業もviewです。Railsの場合、「app/views/layouts/application.html.erb」っていうファイルが必ず(多分)あって、デザイナーは必ずここをいじることになります。このファイルは全体の枠組みのファイルで、WordPressでいうところの「header.php」、「sidebar.php」、「footer.php」がセットになったもの、って感じです。

これからコピペする以下のコードに「<%= yield %>」という部分がありますが、ここに先ほど作った「app/views/messages/index.html.erb」が表示されます。つまり、枠は「app/views/layouts/application.html.erb」、中身は「app/views/messages/index.html.erb」となります。

今回はペラ1のシンプルなWebサービスですが、複雑なものだと、「app/views/layouts/application.html.erb」の枠の中に色んな中身がそれぞれのページごとに入ってきます。例えば、トップページのときの中身、ログインフォームのときの中身、記事を投稿するフォームの中身、記事の一覧を表示する中身...といった感じです。

おっと、この部分を<pre><code>で書こうとしたら表示されない、というLokkaのバグを発見。kuroigamenではお馴染みのGithubのメモ帳サービス「gist」を使って貼りつけました。

ちなみに、「<%= msg %>」に、「flash[:success] = "おめでとう!偉大なるHelloWorldは成功した。"」、「flash[:error] = "残念だが、偉大なるHelloWorldは失敗に終わった。"」のメッセージが表示されるみたいです。

application.html.erb

layouts

作りました。

これでアプリは完成!

公開

ついに最後の作業です。今完成したアプリをkuroigamenでは毎度おなじみのHerokuにデプロイします。

.gemsファイルの用意

Herokuにデプロイするときに、このアプリはこのgem(Rubyのプラグイン)が必要だから入れておいてね、とHerokuに言うメッセージのようなファイルを作ります。それが「.gem」です。

元記事に書いてあるまま「.gems」ファイルを作りましょう。プロジェクトの一番上の階層に作ります。

oauth
ezcrypto
json

「ezcrypto」、「json」ってGemは前回、これがGemsetに入ってなくてハマったやつですね...

kuroigamen_hello_world

作りました。

デプロイ

ついに最後の作業。git で色々やって完了です。では、元記事を見てみましょう。

% git add .
% git commit -m 'finish!'
% git push heroku master
% heroku rake db:migrate

まずは、作ったアプリを「git add」で git のバージョン管理におきます。

それをコミットします(「git commit -m 'finish!'」)。

そのコミットした状態をherokuに送ります。(「git push heroku master」)

「heroku rake db:migrate」で heroku の DB のセットアップ

おっと、これで終わりかと思いきや、「heroku rake db:migrate」で上手くかない!

Missing the Rails 2.3.8 gem. Please `gem install -v=2.3.8 rails`, update your RAILS_GEM_VERSION setting in config/environment.rb for the Rails version you do have installed, or comment out RAILS_GEM_VERSION to use the latest version installed.
(in /app)

...というメッセージ。

Railsのバージョン2.3.8がないよ、って言ってますね。元記事では2.3.8が最新だったのですが、今のHerokuのRailsではもっとバージョンが上がっていて、「.gem」に2.3.8を指定しないといけないのか?と予想を立てて、とりあえずやってみます。

ここに「.gem」のバージョンも含めた書き方が載ってました。

rails --version 2.3.8

を「.gem」に追加。

.gems

この変更をコミット。

git commit -a -m 'added rails'

※今回は変更があったファイルの変更を自動的にコミットするっていう「-a」オプションが付きます。

もう一度herokuにpush。

git push heroku master

DBの設定に再挑戦。

heroku rake db:migrate

ターミナル — bash — 91×27-1

成功した!

ちゃんと出来てるかアクセスしてみます。僕のはここ

まずはトップページ、ログイン前。

偉大なるツイッターアプリ

ログインをクリックすると...おおっ!アプリケーション認証画面。

Twitter _ アプリケーション認証

ログインをすると、「偉大なるHelloWorldをツイートする」ボタンが出現。

偉大なるツイッターアプリ-1

では、ボタンをクリック...成功のメッセージが出現!

偉大なるツイッターアプリ-2

では、Tweetされてるかチェック。

Twitter _ @machida_ 偉大なるHelloWorld ...

出来たー!

最後に

以上で「デザイナーも1時間でツイッターサービスを作ろう!」は終了です。それにしても、この三回に渡って書いた連載ですが、第二回の設定編を記事を書きながら作業をしていたらエラーが出てしまい上手くいかずハマリにハマって、今回は無かったことにしようかな...と思いかけたとき、第一回の準備編の記事にはてぶがたくさん付いてしまい、無かったことに出来ない状況に追い込まれてしまいました。試行錯誤の連続でしたが、無事アプリが公開できてほっとしています。

この元記事を書いたfunc09さん、元記事があるサイトのKRAYさん、勝手に記事をコピペしまくってしまってすいません。

この記事を書いた人
machida

前回の続きです。前回は元記事(1時間でツイッターサービスを作ろう!)のRails環境を自分のMac内に構築するところまででした。今回は外部サービスの登録と、開発の始めのところまで。今回も長い記事になりそうなので、早速本題へ(っていうかこんなペースでは1時間でつくるなんて無理!)。

まずは「cd」コマンドを使って、「Sites/kuroigamen_hello_world」の場所からスタートしてください。

Gitのリポジトリを初期化

今回もHerokuにデプロイしてWebアプリを公開するので、バージョン管理はGit。今作ってる「kuroigamen_hello_world」もGitでバージョン管理をします。コマンドは、

$ git init

これだけ。

バージョン管理したくないファイルを無視ファイルに定義

続いて、Gitの管理下に置きたくないファイルを定義します。例えば、Macの場合必ず出てきてしまう「.DS_Store」っていうファイルがありますよね。この不要なファイルまでリポジトリに入ってくるのは気持ち悪い。他にも、一時的なファイルを置くフォルダなどをGitの管理下から外します。これは元記事のまま、まずは「.gitignore」というファイルを作ります。今回は黒い画面でファイルを作ってみましょう。ずっと前にやった「touch」コマンド。

$ touch .gitignore

これで「.gitignore」というファイルが出来ました。このファイルに、

.DS_Store
log/*.log
tmp/**/*
db/*.sqlite3
db/schema.rb

と、書き込みます。

黒い画面でエディタを使ってみる

おまけで、黒い画面でのファイルへの書き込み方法を紹介。まずは、viという黒い画面用のエディタでファイルを開きます。コマンドは「vi」、引数に開きたいファイル名を入力します。

$ vi .gitignore

そこに、

.DS_Store
log/*.log
tmp/**/*
db/*.sqlite3
db/schema.rb

をコピペ。

続いて、「esc」キーを押す。

「:w」と打って保存完了。

最後に「:q」と打ってエディタを閉じる。

黒い画面のエディタって面倒くせー。おまけで黒い画面でのエディタの使い方を紹介しましたが、この作業はFinderから開いて適当なエディタで編集で全然OKです。

サービスを動かすサーバ、Herokuの設定。

次はKUROIGAMENではお馴染みのRuby版PaaS「Heroku(へロク)」の設定です。これは以前にもここで説明をさせていただきましたので、今回初めてHerokuを使うってかたはこちらをご覧ください。こちらの記事は無料でHerokuに静的ページを置くっていうことを実際にやってみるという記事なのですが、是非これにも挑戦していただきたいです。

  • herokuの会員登録
  • herokuコマンドのインストール

※今回は新たにGemsetを作ってるので前にHerokuを使ったことがある方も、またherokuコマンドをインストール必要があります。インストールは、

$ gem install heroku

上記が完了しましたら、続いて今回作るアプリをHerokuに登録します。Herokuに今回作るアプリのリポジトリ置き場を設置するって作業です。会員登録はブラウザからなのに、リポジトリ置き場の登録は黒い画面(ターミナル)からコマンドを打って行います。

今回「kuroigamen-hello-world」という名前で登録をしますが(Herokuでは「_」を使うことが出来ないので「-」に変えました)、Heroku上には同じ名前をアプリを作ることができないので、これを見ながらやっている方は別の名前で登録をしてください。

$ heroku create kuroigamen-hello-world

すると、

Creating kuroigamen-hello-world... done
http://kuroigamen-hello-world.heroku.com/ | git@heroku.com:kuroigamen-hello-world.git

というメッセージが表示されて完了したっぽい。

Herokuに行ってリポジトリ置き場が登録できてるか確認してみます。HerokuのMy Appsへ行って確認。

ちゃんとできてました。

ツイッターアプリ登録

元記事に書いてあるまま、次の手順、ツイッターアプリ登録の作業に移ります。

登録はこちらから。要Twitterアカウント。

ここで元記事にある「ポイントになるのは・・」に注目。

* アプリケーションの種類:ブラウザアプリケーション
* コールバックURL:http://twitter-helloworld.heroku.com/oauth_callback
* Default Access type:Read & Write

とすることです。

コールバックURLは、自分のサービスURLに「/oauth_callback」を追加したものを設定してください。

この点に注意して入力します。

ついでに、Herokuを初めての方へ。

先ほど確認したHerokuのMy Appsに表示されてるアプリ名をクリックすると、

こんな画面が表示されます。

ここにある「Heroku URL http://kuroigamen-hello-world.heroku.com」っていうところがアプリを公開するURLになります。

元記事には、

コールバックURLは、自分のサービスURLに「/oauth_callback」を追加したものを設定してください。

とありますので、今回の僕の場合は「コールバックURL」は「http://kuroigamen-hello-world.heroku.com/oauth_callback」になります。

入力した内容は以下。

New Twitter Application | dev.twitter.com

黒い画面ハローワールド Settings | dev.twitter.com-1

登録が済んだら、「Consumer key」と「Consumer secret」をメモっておきます。

以上でツイッターアプリ登録は完了。

開発

いよいよ開発です。開発…すいません、全然Railsのことを知らないので、ここからは元記事に書いてあることをただなぞっていく作業になってしまいます。

では、「kuroigamen_hello_world」の場所から作業スタート。

public/index.htmlを削除する

書いてある通りにやってみます。ファイルの削除のコマンドは「rm」。リムーブの略ですね。ただ、せっかくなので捨てる前にこのファイルを開いてみます。

Ruby on Rails_ Welcome aboard

なるほど、Railsでアプリを開発する手順が書かれてますね。「index.html」を削除することも手順「2」に含まれています。ついでに、手順1は「Use script/generate to create your models and controllers」、手順3は「Create your database」。これらの作業も後でやることになりそうな予感。

では、「rm」コマンドで「index.html」を削除。

$ rm public/index.html

ツイッター認証

どんどん先に進みたいと思います。元記事によると、「twitter-auth(http://github.com/mbleigh/twitter-auth)」というプラグインを使うことで、面倒そうなTwitterとの連携部分の機能の実装をサクっと完了させられるそうです。Railsはこういった便利なプラグインがたくさんあるところが大きな魅力の一つだそうです。デザイナーの僕からすると、「WordPressみたいなものかー」、という感じ。

この元記事では、「script/plugin install」というコマンドが書いてあるのですが、KUROIGAMENではRubyのGemという機能を使って、「gem install」っていうコマンドを使ってやってます。その方法は比較的新しいやり方のようで、元記事にある「script/plugin install」はちょっと古いやり方です。ググッてみると、Gemを使って「twitter-auth」をインストールする方法もちらほらあったのですが、今回は何か起こったら怖いので元記事のままやってみましょう。

$ script/plugin install git://github.com/mbleigh/twitter-auth.git

次に、それを使うコマンド

$ script/generate twitter_auth

ターミナル — bash — 97×44

ウギャー、ここでエラー発生。あとは元記事をなぞるだけで成功すると思ったのに…。

エラーメッセージを見てみると、

no such file to load -- json (MissingSourceFile)

という一文が。もう勘以外のなんでもないですが、jsonってやつが無いのがエラーの原因?と思って、

$ gem install jason

をやってみました。

もう一回、

$ script/generate twitter_auth

に挑戦。

また、エラー。でも、エラーメッセージが変わってる!これはいけそうな予感。今度のエラーメッセージは、

no such file to load -- oauth (MissingSourceFile)

なら、今度は

$ gem install oauth

またまた

$ script/generate twitter_auth

またエラーが出たけど、さらに別のメッセージが出てきました。

Missing these required gems:
ezcrypto

「ezcrypto」ってGemを入れてくれよ、って言ってますね。今度のエラーメッセージはわかりやすい。じゃあ、入れてあげましょうと、

$ gem install ezcrypto

次こそはいけるか?!

$ script/generate twitter_auth

ターミナル — bash — 97×44-1

できた!(実はこのエラーを解決するのに一日かかってます…)

一応これを読んでるかたが確認できるように、Gemsetの中に入ってるGemの一覧を表示しておきたいと思います。もし上手くいかなかった方は見比べてみてください。Gemの一覧を表示するコマンドは、

$ gem list

Gemsetの中のGemは、

actionmailer (2.3.8)
actionpack (2.3.8)
activerecord (2.3.8)
activeresource (2.3.8)
activesupport (2.3.8)
configuration (1.2.0)
ezcrypto (0.7.2)
heroku (2.0.4)
json (1.5.1)
launchy (0.4.0)
mime-types (1.16)
oauth (0.4.4)
rack (1.1.2)
rails (2.3.8)
rake (0.8.7)
rest-client (1.6.1)
term-ansicolor (1.0.5)

ちゃんと「twitter_auth」が動いたかを確認するために、

$ rake routes

と、打ってみましょう。

login        /login                             {:controller=>"sessions", :action=>"new"}
logout        /logout                            {:controller=>"sessions", :action=>"destroy"}
new_session GET    /session/new(.:format)             {:controller=>"sessions", :action=>"new"}
edit_session GET    /session/edit(.:format)            {:controller=>"sessions", :action=>"edit"}
session GET    /session(.:format)                 {:controller=>"sessions", :action=>"show"}
PUT    /session(.:format)                 {:controller=>"sessions", :action=>"update"}
DELETE /session(.:format)                 {:controller=>"sessions", :action=>"destroy"}
POST   /session(.:format)                 {:controller=>"sessions", :action=>"create"}
oauth_callback        /oauth_callback                    {:controller=>"sessions", :action=>"oauth_callback"}
/:controller/:action/:id           
/:controller/:action/:id(.:format) 

と、出ればOKです。これはTwitter認証でログインをしたりなど、面倒なところを「twitter_auth」がやってくれた、っていう証です。

config/twitter_auth.yml というファイルの書き換え

では、次に設定ファイルの書き換えを行います。先ほどのツイッターアプリ登録の内容を設定ファイルに入力する作業です。「config/twitter_auth.yml 」を書き換えます。

config

今回は黒い画面ではなく、Finderからファイルをところまで行ってエディタで編集してしまいました。

twitter_auth.yml - _Users_machida_Sites_kuroigamen_hello_world_config

上の画像の下線部分にツイッターアプリ登録した際に得た「Consumer key」、「Consumer secret」をそれぞれ入力します。

長くなってしまったので今回はここまで。いよいよ次回は最終回です。それにしても、@func09さんの記事をそのままやってるだけのこの記事に結構はてブがついてしまって申し訳ない。KRAYさん、勝手にこんな記事を書いてしまってすいません…。

この記事を書いた人
machida

こんにちは、町田です。

先日のCSS Niteにお越しいただいた皆様、本当にありがとうございました。

CSS Niteの発表とほぼ同じくらいの絶妙なタイミングでAmazonのサーバにトラブルが発生し、このサイトも影響を受けて結構長い時間アクセスが出来ませんでしたが、どうにか無事復旧されてほっとしているところです。KUROIGAMENでよく出てくるホスティングサービス「Heroku(へロク)」ってAmazonのサーバで動いているんですよね。KUROIGAMEN自体もHerokuで動かしてます。

これからも黒い画面で何かやって上手くできたら、その情報を皆様にもシェアできるように頑張って記事を書いていきたいと思ってますので、宜しくお願い致します。

あのすごい数の「はてブ」がついた伝説の記事に挑戦。

今回は以前ここで紹介させていただきましたHappy1000Days!の作者@func09さんが以前在籍していた株式会社クレイさんのサイトのブログに書いた記事、「1時間でツイッターサービスを作ろう!」に挑戦したいと思います。この記事、なんだかものすごい数のはてブ数がついているので、KUROIGAMENもその人気にあやかってやろう、という汚い魂胆。

それにしても、KRAYさんのサイトは見た目は綺麗だし、ブログの内容も充実しているし、本当素敵なサイト。特に僕は「考える」のページがコンパクトに大事なことがまとめられててお気に入りです。

KRAY - みんなで考え、作り、価値を生み出す

今回はGithubからアプリのリポジトリをcloneしてそれをローカルで立ち上げる、それをHerokuに置いて公開する、という流れではなく、ゼロから自分でアプリを作り、それをHerokuに置いて公開する、という初のWebアプリ作成に挑戦です。今回も「言語はRuby」、「サーバはHeroku」、KUROIGAMENではお馴染みの組み合わせ(そろそろPython、GAEなんかにも挑戦したいところ…誰か教えて!)。

今回つくるアプリ「偉大なるHello World」

この記事では1時間で「偉大なるHello World」というWebアプリをつくる手順が説明されています。まずは今回挑戦するそのアプリの説明を。

アプリのページに行くとログインへのリンクが表示されます。

偉大なるツイッターアプリ

ログインはTwitterのOAuthという機能を使って、Twitterアカウントでログインします。

Twitter

ログインをすると、「偉大なるHelloWorldをツイートする」というボタンが出現。

偉大なるツイッターアプリ-1

ボタンをクリックすると、「おめでとう!偉大なるHelloWorldは成功した。」というメッセージ。

偉大なるツイッターアプリ-2

Twitterを見てみると…「偉大なるHelloWorld」とツイートされてる!

Twitter _ @machida_ 偉大なるHelloWorld ...

という、これだけのシンプルなWebアプリ。

開発環境を準備。

「1時間でツイッターサービスを作ろう!」の記事が公開されたのは2010年07月23日。まだ一年も経っていないのですが、Railsが当時のバージョンと今のバージョンとで違っています。Railsはバージョンが変わると結構仕様が変わるという場合によっては厄介なフレームワーク(古いものは切り捨て、新しい要素を柔軟に吸収するため、現在でも素敵で便利なフレームワークの座を守り続けています)。Railsのバージョンが原因でうまくいかない、ってことがないように、RVMを使って、この記事と同じ環境をつくるところからスタートしたいと思います。

以前KUROIGAMENで説明したRVMのセッティングはこちら

今回つくる「偉大なるHello World」の環境について書いてあるサイトはないものかとググってみたところ、ちょうどその情報をまとめて書いてくれてる記事を発見!さすが人気記事。

偉大なるハローワールドをローカルで動かす。

この記事を書いていてくれた@zonoiseさん、ありがとうございます!

この記事の「偉大なるハローワールドを作成する際にRails初めての人がハマりそうなところ。」の部分に注目。

偉大なるハローワールドを作成する際にRails初めての人がハマりそうなところ。

Rails入っていなかったら、バージョン指定してインストールする。

gem install rails -v 2.3.8

railsのバージョンを指定して、アプリケーションを作成するには

rails _2.3.8_ app_name

それと、Rubyのバージョンもチェック。

Ruby version              1.8.7 (i686-linux)

開発環境にまとめると、

  • Rubyのバージョンは1.8.7なので、RVMを使ってRuby1.8.7を使うように設定。
  • Railsのバージョンは2.3.8なので、「偉大なるHelloWorld」用にGem set をつくる。

では、早速やってみたいと思います。

RVMでRuby1.8.7を使う設定

先日のCSS Niteで黒い画面の説明があったところなので、今回は丁寧にコマンド一個一個から説明していきたいと思います。

RVMを使ってRuby1.8.7を使う設定。まずは「rvm」コマンドに引数「use」と「バージョン」を渡します。

$ rvm use 1.8.7

もし、1.8.7が入っていない場合は、

$ rvm install 1.8.7

コマンドを打ってインストールをしてから。

「rvm use」に成功すると、

Using /Users/machida/.rvm/gems/ruby-1.8.7-p334

というメッセージが表示されます(※-p334の数字は異なる場合があります)。いつも成功しても何も言ってくれない黒い画面ですが、RVMのときはちょっと優しいですね。

これでRVMを使ってRuby1.8.7を使う設定は完了。

「kuroigamen_hello_world」用のGemsetを作成

続いて、RVMを使って、「kuroigamen_hello_world」用のGemsetを作成します。今回は「kuroigamen_hello_world」用に「kuroigamen_hello_world」という名前のGemsetを作成。

$ rvm gemset create kuroigamen_hello_world

成功すると、

'kuroigamen_hello_world' gemset created (/Users/machida/.rvm/gems/ruby-1.8.7-p334@kuroigamen_hello_world).

というメッセージが表示されます(※こちらも-p334の数字は異なる場合があります)

作成したGemsetを使う設定をします。さっきのコマンドの「create」を「use」に変えるだけ。

$ rvm gemset use kuroigamen_hello_world

成功すると、

Now using gemset 'kuroigamen_hello_world'

というメッセージが表示されます。

これで「kuroigamen_hello_world」用のGemsetを作成は完了。

Gemset「kuroigamen_hello_world」にRailsのバージョン2.3.8をインストール

続いて、作成したGemset「kuroigamen_hello_world」にRailsのバージョン2.3.8をインストール。依存する色んなGemが入るので結構時間がかかります。

gem install rails -v 2.3.8

Railsのバージョン2.3.8をインストール完了。

プロジェクト「kuroigamen_hello_world」をRailsで作成

Railsのバージョン2.3.8のインストールが完了したら「/Sites」に移動します。なんで「/Sites」に移動かと言うと、僕の場合、アプリをつくる場所はMacの「/Sites」、Finderで見ると「サイト」というフォルダ名で表示されてるディレクトリの中を指定しているからです。今回もそのディレクトリに「kuroigamen_hello_world」プロジェクトを置いて開発を進めます。移動は「cd」コマンド。

$ cd Sites/

続いて、このディレクトリに「kuroigamen_hello_world」というRailsのプロジェクトをつくります。コマンドは「rails」で、引数にプロジェクト名「kuroigamen_hello_world」という文字列を渡します。ここで念のため、使うRailsのバージョンも指定しておきたいので、「_2.3.8_」というバージョンの文字列をrailsコマンドとプロジェクト名の間にはさみます(GemsetにはRailsバージョン2.3.8しか入っていないので必要はないのですが、念のため)。

$ rails _2.3.8_ kuroigamen_hello_world

ちゃんとRailsプロジェクトのディレクトリ「kuroigamen_hello_worl」が出来ているかの確認。「ls」コマンドを使って、「/Sites」の中身をリストで黒い画面に表示してみましょう。

$ ls

「kuroigamen_hello_world」出ました(※「/Sites」ディレクトリは色々お仕事関係のリポジトリが入ってるのでぼかしを入れさせていただきました)。

ターミナル-—-bash-—-80×24-1

「kuroigamen_hello_world」ディレクトリに移動。使うコマンドは「cd」。

$ cd kuroigamen_hello_world

以上で準備は完了。とりあえず今回はここまで。

ここまで出来たら、あとは元記事の手順通りに進めれば出来ますので、気の早いかたは是非挑戦してみてください。

この記事を書いた人
machida

以前RVMのお話をさせていただいたときは、使うRubyによってGemsetが切り替わる、というところまででしたが、今回は開発するプロジェクトごとにGemsetを切り替える方法の説明です。

※前にやったRVMの説明はこちら

今回やろとしていることを図にすると、

RVMを使って複数のRubyをローカルで共存させると、使うRubyによって使うGemsetが切り替わる。

RVMとGemset

今回は使うRubyでGemsetを使い分けるのではなく、開発するプロジェクトごとにGemsetを使い分ける方法。

RVMとGemset

…ということをやってみよう、というお話です。

手順

では、早速実践。今回は「lokka-company-site-kit」という、Lokkaで会社サイトを構築するためのテーマをつくろうかなぁと思っていて、それの開発のためのGemsetを作って、それを使ってローカルで構築してHerokuにデプロイする、という作業を例に説明していきます。

まずはcdコマンドで「lokka-company-site-kit」のディレクトリに移動。そうそう、この「lokka-company-site-kit」というプロジェクトはLokkaのテーマを作成するためのプロジェクトなので、「lokka-company-site-kit」の中身はLokkaをクローンしたものです。

$ cd Site/lokka-company-site-kit

ターミナル — bash — 80×24-6

続いて、「lokka-company-site-kit」という名前のGemsetを作るコマンドを入力。

$ rvm gemset create lokka-company-site-kit

ターミナル — bash — 80×24-7

次に、「lokka-company-site-kit」という名前のGemsetを使うコマンドを入力。

$ rvm gemset use lokka-company-site-kit

「create」を「use」にするだけ!

ターミナル — bash — 80×24-8

これで完了。

作ったばかりのGemset「lokka-company-site-kit」の中身は空っぽなので、「lokka-company-site-kit」はローカルでは立ち上がりません。せっかくなので、Lokkaを立ち上げる作業もおさらいしてみたいと思います。

Lokkaをローカルで立ち上げる手順のおさらい

まずはプロジェクトに必要なgemをまとめてインストールするためのgem、「bundler」をインストール。

$ gem install bundler

ターミナル — bash — 80×24-9

続いて、ローカルでLokkaを立ち上げるためのgemを先ほど入れたbundlerを使ってまとめてインストール。

$ bundle install --path vendor/bundle --without production

ガーっと色んなgemがインストールされました。

ターミナル — bash — 80×24-10

では、Lokkaを立ち上げてみましょう。

※Lokkaを立ち上げるコマンドは以前にKUROIGAMENで紹介したものとは変わっているので注意。

$ bundle exec ruby lokka.rb

http://localhost:9646/

Test Site

立ち上がったLokkaを終了させるときは、黒い画面上で「control + c」キーを押します。

↑※この部分「command + c」って間違えて書いてしまってました。

ついでにHerokuにデプロイもおさらい

せっかくなので、Herokuにデプロイする方法もおさらいしてしまいたいと思います。

Herokuにデプロイするには、Herokuにユーザー登録する必要があります。登録方法はこちら

新しく作ったGemsetを使っているのでHerokuコマンドもまたインストールする必要があります。

$ gem install heroku

RVMのGemsetのディレクトリは「sudo」を打つ必要はないので、今回は「sudo」無しで。

ターミナル — bash — 80×24-12

次に、Heroku上に今回のプロジェクト「lokka-company-site-kit」のリポジトリ置き場を登録します。HerokuはWebのGUIがあるのに、リポジトリ置き場の登録も黒い画面でやるっていうところがなんか格好いいなぁって、エンジニアではないデザイナーの僕は思ってしまいます。

$ heroku create lokka-company-site-kit

heroku createの後にプロジェクト名を入れてください。今回僕が作った「lokka-company-site-kit」という名前はHeroku上で一つしか作れないので、まだ誰も使っていない別の名前で登録をする必要があります。

ターミナル — bash — 80×24-13

はい、できました。では、Herokuに行ってちゃんと反映されているか確認してみます。

確認はこちらから

Heroku

ちゃんと反映されてました。

最後にHerokuにデプロイ。

$ git push heroku master

ターミナル — bash — 80×24-14

Herokuから割り当てられたURLにアクセスしてみると…

Heroku | lokka-company-site-kit | General Info

Test Site-1

はい、ちゃんとHeroku上でLokkaで作ったプロジェクト「lokka-company-site-kit」が公開されました!

この記事を書いた人
machida

こんにちは、町田です。

また記事の更新に時間がたってしまいました。今度の木曜日(2011年4月21日)はCSS Nite in Ginza, Vol.56でkomagataさんが「黒い画面」について話します。ここでちゃんと告知をしようかと思ってたのですが、震災でバタバタしているうちにあっという定員をオーバーしてしまってました。定員はオーバーしてますが、CSS Niteに来られるコーダーやデザイナーの方はTwitterとかを見てるといつも夜遅くまで仕事してて忙しそうな方が多いので(僕だけの勝手なイメージかも)、ドタキャンが結構出て割と会場に入れるんじゃないかなぁと思います。

CSS Nite in Ginza, Vol.56

さてさて、宣伝はここまで。

僕の場合、ちょっとイレギュラーな方法なのですが、下書き機能が実装される前からのLokkaを使っているため、

  1. まずはローカルのLokkaを立ち上げる
  2. ローカルのLokkaに記事を書く
  3. 完成したらHeroku上のLokkaの管理画面に行って書いた記事をコピペ

…という方法で記事を投稿しています(なんてアナログ!)。

その場合、Heroku上のLokkaに記事をコピペした際に修正を加えたりすることがあって、そうするとローカルとHerokuのDBの内容が微妙に違うものになってしまい、これがちょっと気持ち悪い。

で、今回はHeroku上のDBをローカルに持ってきて、ローカルのLokkaのDBの内容をそっちにする、っていう方法のお話です。この方法を知ってしまえばLokkaのDBのバックアップができます。

手順

まずはローカルのLokkaのディレクトリへ「cd」コマンドで移動。

ターミナル — bash — 80×24-1

以下のコマンドを実行します。

$ heroku db:pull sqlite://backup.sqlite3

すると、ここでエラー。

ターミナル — bash — 80×24-2

※上のキャプチャはRVMでgemsetを選択してるところがあるので、「Now using gemset 'kuroigamen'」より上の行は無視しちゃってください。

エラーメッセージは以下。

Taps Load Error: no such file to load -- taps/operation
You may need to install or update the taps gem to use db commands.
On most systems this will be:

sudo gem install taps

「Tapsっていうgemを入れてくれよ!」と、黒い画面が言ってます。TapsとはDBを変換して取ってきてくれるGemだそうです。今回の場合はHeroku上のLokkaはPostgreSQLというDBを使ってるのですが、それをSQLiteというDBに変換して取ってこよう、ということをします。

なんでSQLiteに変換してから取ってくるの?という疑問はこの後で。とりあえずTapsをインストールするために以下のコマンドを実行。

$ sudo gem install taps

ターミナル — bash — 80×24-3

なんだかガッツりTapsに依存してる色んなgemもインストールされました。

もう一度、

$ heroku db:pull sqlite://backup.sqlite3

コマンドに挑戦。

ターミナル — ruby — 80×24

すると、なんか「!」とか、「WARNING」と、怖い感じのメッセージが出現。

 !    WARNING: Potentially Destructive Action
 !    This command will affect the app: kuroigamen
 !    To proceed, type "kuroigamen" or re-run this command with --confirm kuroigamen

ここは恐れずに「type "kuroigamen"」の指示に従って、

> kuroigamen

と、入力。

ターミナル — bash — 80×24-4

お、できたっぽい!

では、FinderでローカルのLokkaフォルダを見てみましょう。「backup.sqlite3」という名前のファイルがいます。

kuroigamen-1

このファイルが先ほどTapsを使って取ってきたDBです。このファイルを「development.sqlite3」という名前に変更。

続いて、取ってきたDBを「/db」の中にいれます。

db

では、早速ローカルのLokkaを立ち上げてみます。

KUROIGAMEN(黒い画面)-1

出来た!

なんでSQLiteに変換してから取ってくるの?…という疑問ですが、SQLiteのファイルは今やったようにファイルをポコンっと設置するだけでDBを移動できてしまう便利なDBだからです。これがMySQLなど他のDBだとこんな風にはできないみたいです。こういう風に簡単にDBをインポートしたり、バックアップしたりすることを考えて作られてるLokkaです。なんかDBってよくわからなくて怖いって思ってしまうデザイナーの僕にとって、SQLiteはすごくいいDB!

この記事を書いた人
machida

こんには。最近は休日にKUROIGAMENの記事を書いてるので大体週一のペースで更新してます。

毎回KUROIGAMENではゴールを決めて、それが出来たら完了、というカタチで記事を書いてます。なので、Macで黒い画面(ターミナル)を立ち上げて、作業をしながら読んでいただきたいです。あと、僕はこの記事を最新のOSの環境でやって書いているので、これを読んでる方も最新のものを使わないと、この記事通りにいかない可能性があります。まぁ、OSなんてデザイナーから見たらフォトショやイラレに比べて全然安いし。

今回はLokkaをHerokuで公開する方法の解説です。

HerokuにLokkaをPush

前にやった「gituhubからLokkaを落としてローカルで動かす。」でやったリポジトリを Herokuにpushして公開します。

Herokuに自分のLokkaのリポジトリ登録する方法は、前にやった「デザイナーもHerokuを使ってみよう!Herokuを使って静的ページを無料で作る」と同じ。

$ heroku create machida-lokka

とherokuコマンドを使って登録します(詳しくは「デザイナーもHerokuを使ってみよう!Herokuを使って静的ページを無料で作る」の Herokuにリポジトリ置き場を登録を見てください)。ちなみに「machida-lokka」の部分はHeroku全体で同じ名前は一個しか作れないので、これを見ているデザイナーの皆さんはそれぞれ独自の名前を付けてください。

それが出来たらHerokuにPush(もし、変更や追加があったらPushの前にcommitを忘れずに)。

$ git push heroku master

DBの設定

これで、HerokuにLokkaが置かれました。続いて、Heroku上のLokkaのDBの設定を行います。WordPressで言ったら wp_config.phpにDBの設定やらを書くやつですね。Lokkaの場合はこの作業を黒い画面を使って行います。

$ heroku rake db:setup

設定とは言っても、この一行だけ。これでLokkaの公開は完了です。

この記事を書いた人
machida

最近よくGitHubをウロウロしては、デザインテロをするのにいいアプリはないかと探してるのですが、なかなかないですよね。RubyのGemとかはいくらでもあるんですが、Happy1000Days!やフィヨルドのサービスのような、それ単体で動くWebアプリを公開してる人がなかなか見つからない。何かいい検索の仕方があったら教えていただきたいです。

静的ページのデザインテロ

久しぶりにデザインテロしました。今回のターゲットは「Remember the WordPress」っていうWordPressのPlugin。その説明とダウンロードへのリンクが置いてあるっていうペラ一(イチ)の静的ページ。前回やった、「デザイナーもHerokuを使ってみよう!Herokuを使って静的ページを無料で作る」を使ったデザインテロです。Herokuにpushするだけで静的ページが公開されるっていう便利アプリを使ったやつです。

アプリを紹介するページを作る

アプリの紹介ページを作るっていうのはなかなかデザインテロ活動としても有益なんじゃないかなぁ、って思いました。作るのは静的ページでいいから、ローカルでアプリを動かす手間もいらないし。そんなの作って意味あるの?って思う方もいるかもしれませんが、こういうページって実際結構大事なんですよ。

例えば、いつもKURIGAMENで使ってるRubyのGemの「bundler」。これ、こんなページが用意されてるんですよね。

格好いい!使いたくなってきますよね。

あとはKUROIGAMENで採用しているMacのPackage Manager、「Homebrew」のページはこれ。

うーん、こっちも格好いい!

こんな感じで、イケてるアプリにはイケてる紹介ページがあったりして、「使ってみたい!」って思わせてくるんですよね。こんなのどうでもいい、実際の使い勝手や性能が重要だ、って思う方もいるかもしれないけど、逆に、いくら性能が良くてもこんなダサいのを自分のマシンに入れたくないなぁ、って思う人もいるはず。KUROIGAMENはそちら側の味方です。っていうか、「こんなダサいのを自分のマシンに入れたくないなぁ」って思ったんなら、自分でそこをHackしてやろう、ってのがKUROIGAMENのコンセプトです。

Remember the WordPressとは?

実はこのPlugin、仕様は僕が考えたんですよね。Help me, hackers!っていうフィヨルドがやってるサービスがあるんですが、そこに僕がこんなPluginあったら便利じゃない?って投稿したところ、terakumaさんが見事作ってくれました。いくら議論を重ねたってそんなものは成果物の前では全く無力なんだなぁって思っちゃいますね。格好いいよ、terakumaさん!

ちなみにterakumaさんはe2esound.comという屋号でwebサイト制作、システム構築をやられているエンジニアさんです。あと、法律関係に詳しいです。

それにしても、こんなカタチで成果物を出されちゃったら、WordPress関係の仕事の依頼が来たらterakumaさんにお願いしよう、って気になりますよね。飲み会で知り合って話が面白かったから、とか、Twitterで絡んで面白かったから、ってだけで仕事を依頼したり、貰ったりするのはどうなぁ、って僕個人としては思っちゃう派です。友達になるのは全然OKなんですが、仕事となるとやっぱりいい成果を残すために、ブログを見たり、成果物を見たりした上でお願いしたいところです。なので、成果物を公開しない、ブログを書いてない、でも仕事欲しい、って人もたまに見ますが、うーむ…。

下請けの下請けみたいな仕事ばっかりやってて公開できない成果しかないっていうデザイナーにもデザインテロはおすすめです。

…と、話が大分逸れちゃいました。

Remember the WordPressの仕様

Help me, hackers!に僕が投稿した仕様を書いておきます。

例えば、「お店のスタッフの顔が見えるホームページ」というコンセプトに従い、コンテンツの一つとして「ブログ」を設置。

ところが全くそのブログが更新されず、顔が見えるどころか閉店してしまっているのでは、とサイトの訪問者に誤解を招くような結果に・・・。

そのお店の店長は、「インターネットのことは若いもんに任せてるから」と、売り上げるを上げる為に作ったせっかくのホームページが逆効果を生んでいることは露知らず。

なんてことが起きるのを防ぐために、任意の期間ブログが更新されなかったらメールで通知がくる、っていうPluginってちょっと需要あるんじゃないかなぁ、って思いました。

仕様

  • 管理画面で通知するメールアドレスを入力できる
  • 管理画面で何日更新されなかったら(新規投稿がなかったら)通知するかの期間が選択できる
  • 通知されるメールの文章を管理画面から入力できる

うーん、なんて泥臭い機能なんだろう。

Remember the WordPressのデザインプロセス

このPlugin、なかなか厳しい機能ですよね。ブログが更新されていないってことを上司にチクるっていうものですから。

さてさて、じゃあって言うんで鬼の画像を用意して筆文字で「Remember the WordPress」なんて書いたようなものを載せたデザインを用意したら、まぁ、これはこれでわかりやすけど、ちょっと好かれないようなぁ、っていうか僕の好みの問題もあるけれど、ちょっと違うなぁ、って思いました。

こんなじゃなくて、WordpPressが「私のこと忘れないで」って言ってくる感じ。その擬人化させたWordPressはきっと小さな女の子なので(おっと、段々変態妄想へ)、機械っぽいのとは真逆、裏で擬似cronが動いているとかは放っておいて、テクスチャを使ったりしてオーガニックな感じにしたいなぁ、と。

お気づきの方がほとんどだと思いますが、「Remember the WordPress」ってRemember The Milkをパロったネーミングなので(命名はterakumaさん)、牛乳の絵を添えました。メールでお知らせが来るので手紙も添えて、ちょっと悪ノリして牛のペーパーウエイトも。赤っぽい差し色が欲しかったので、手紙の封は赤いWordPressロゴを付けました。

そんなこんなで、出来たのがこれ。

なかなか可愛いのが出来ました。

追記

terakumaさんが公開してくださいました!

Remember the WordPress

ブログにも取り上げていただきました。

デザインテロの被害にあいました

ありがとうございますー!

最新の実績

  • Remember The Wordpress
  • happy1000days
  • happy1000days
  • happy1000days

こちらも合わせてどうぞ

  • webデザイナーの為の「本当は怖くない」“黒い画面”入門

アフィリエイト