gem deviseとの格闘

 まだtutorialは全く終わっていませんが、現実逃避としてオリジナルアプリの制作にとりかかっている今日このごろ。その第一歩として、ログイン機能をまずつけることにしました。

 Progateではログイン機能を自分で作っていきましたが、gemの中にdeviseというログイン機能に特化したものがあるようなのでそれを用いることにしました。

 

今回のdevise導入の参考として利用させていただいたのはこれです!!

[*Rails*] deviseの使い方(rails5版)

 本当にわかりやすくてありがたかったです。今回はTwitter認証はやらなかったのでその部分は飛ばしています。(本当は認証を導入しようとしていたのですが、色々あって断念しました。コールバックのURLはしっかりとrails routes で調べて登録しましょう笑。)

gemfileにdeviseを書き込み。

bundle install

rails g devise:install

その後、英文の説明に沿って、デフォルトのURLを設定、root_urlを指定、flashメッセージの設定、deviseのviewファイルを生成(rails g devise:views)しました。

 

続いて、Userモデルを作るために

rails g devise Userを実行し、rake db:migrateでDBに反映。

 

しかし、このままではユーザー登録時に入力するものがemailとpasswordだけになってしまう。僕はどうしてもusernameも欲しかったのでそれも加えることに。

 

・usersテーブルにusernameカラムを追加
rails g migration add_username_to_users username:string
rake db:migrate

 

・viewファイルにusername用の入力フィールドを作る

<div class="field">
  <%= f.label :username %>
  <%= f.text_field :username, autofocus: true %>
</div>

 views/devise/registrations/new.html.erbとedit.html.erbに上の記述を追加。

 

最後にストロングパラメータというよくわからんものにusernameも受け取ってくださいというお願いをする。(たぶんそういうことなのだろう。)

applicationcontrollerに以下の記述を貼り付けるだけでいいようです。

class ApplicationController < ActionController::Base
 protect_from_forgery with: :exception
 before_action :configure_permitted_parameters, if: :devise_controller?

# 省略

 protected
 def configure_permitted_parameters
  devise_parameter_sanitizer.permit(:sign_up, keys: [:username])
  devise_parameter_sanitizer.permit(:account_update, keys: [:username])
 end
end

 

 

 

格闘中に非常に役立った仲間たち

・git checkout . (変更したファイルを変更前の状態に戻す。ただし、初期のブランチに存在しないファイルは消えずに存在し続ける)

・rm -rf `git status --short | grep '??' | awk '{print $2}'` (意味は全くわかっていないが、初期のブランチに存在しないファイルを消去してくれるらしい)

・rake db:reset(DBの初期化、rollback前にファイルの状況をもとに戻してしまったときにお世話になった)

rails tutorial 第一章やってみました

 Progate(HTML,CSSRubyRails)にお世話になりまくりの今日このごろ。けれどこれだけやってても、限界があるような気が。

そう感じた僕は次になにをしようかと悩んでいました。

自分でWEBアプリケーション作ってみるか。でも、まだどんなことができるかよくわかってないし・・・。そうだ、rails-tutorialだ。rails-tutorial、それはruby on ralisを学んでいるものなら一度は耳にするものだろう。しかし、tutorialを前にして挫折するものも多いと聞くし・・・まぁ、やってみるか!!

 

僕は以上のような、思考過程を経てrails tutorialに挑むことにしました。

しかし、rails tutorialはかなり大変と聞く。とにかく情報収集。

わかったことは、

①とにかく続けること

②とにかく調べること

③全く分からなければ飛ばして進んじゃえ

④圧倒的な時間を作って、どんどん進めていこう

みたいなことでした。

tutorialは、長く、険しく、ややこしいらしく、tutorialには書いていないerrorも出てくる。それとどう向き合っていくのかが一番重要なポイントのようだ。

 

とにかく、やってみよう。(Cloud9でやりました。)そして見事にerrorの嵐。bitbucketにコミットできない。herokuにデプロイしたつもりなのに、heroku openしてもなぜかhello worldと出てくれない・・・。error,errror,error,一日中、ネットで調べては試すことを繰り返しました。しかし、それでも問題は解決しませんでした。(多分、原因はいろいろ試しすぎてbranchが複数できていたことかと思うが、詳しくはわかりません。)

 

何がなんだかわからないので、とにかく一度はじめからやることに。

tutorialにそって、やっていくと途中でerrorが。調べてみると、意味がよくわからないがなんだか不必要なもの(1度目のときにつくったもの)がありました。

git remote -v
origin git@bitbucket.org:----------/hello_app.git (fetch)
origin git@bitbucket.org:----------/hello_app.git (push)

新しくはじめて必要ないので、

git remote rm origin

で削除しました。それ以降は、tutorialにそっていくとうまくいきました。

Hello Worldがこんなに嬉しかったのは久しぶりです。笑

 

第一章でなんとなくわかったこと

  • gemのversion指定
  • model view controller の関係
  • Gitとはなにものか (これはまだイマイチなのでGithub,Bitbucketと合わせて要勉強)
  • ブランチ、編集、コミット、マージ の流れ (少し古いかもしれないが、非常によくまとまっていてわかりやすかったです。基本的なGitコマンドまとめ
  • Herokuとはなにものか (これもやっぱり何が起こっているのかまだわかっていない。なんか、デプロイできてもうた、みたいな気分です)
  • とにかく、分からなくても粘りづよくなった。笑

引き続いて第二章もどんどんやっていきます!!!

プログラミングを学びはじめて1ヶ月で感じたこと

 プログラミングを学び初めて、一ヶ月が経ちました。とは言っても最初の頃は何をすればいいのかわからず、本屋で立ち読みや、ネットで検索する日々だったので、実際に自分でなにかを打ち込むという作業はしていませんでした。 

この一ヶ月で感じたことは、

  1. サービスを生み出したいならプログラミングスキルも大切だけど、生み出したいものを具体的に表現できる(言葉でも、絵でもなんでもいい)ことが大切ということ。 
  2. 詳細なことより全体から学ぶ方が頭に入ること。
  3. 自分が学んだことをメモしておかないと、その日何をやっていたのかわからないこと。

です。

 

まず1つ目:サービスを作りたいなら、作りたいものを言葉にできた方がいいについてです。プログラミングを学び始める人の多くは、具体的であったりボンヤリという違いはあっても何かサービスを生み出したい、自分の業務を自動化できるようにしたいなどと思っています。

そういう僕自身なんでもいいから何かすごいものを生み出したいという思いからプログラミングに手を出しました。その時は言語がたくさんあることや、実際どんな作業でサービスが出来上がるか分かっていませんでした。(今も全然わかっていないけども・・・)あのときの僕にとってプログラミングという言葉は魔法みたいなものだったのでしょう。どんなサービスを創り出したいという思いもなく、プログラミングを学びさえすれば作れるようになると思い込んでいたのです。

僕みたいな考え方の人は結構多いのではないでしょうか。そしてその多くは、その作業の地味さ、数々のエラーの文字、やってはいるけど成長しているのかわからないことなどに絶望し学ぶことをやめてしまうのです。

この途中退場を防ぐためにできることの1つ(*1)が、作りたいサービスを具体化しておくことなのです。すごいのか、ショボいのか、そんなもの大切じゃありません。自分が作りたいか、絶対に作ってやると思えるかが大切なのです。

 

続いて、詳細より全体から学ぶことです。詳細なことは数を掛けていけばいつのまにか覚えているものです。全体を知っていくからこそ、詳細な部分の役割が見えてくるのでしょう。結局は、全体⇒詳細、詳細⇒全体という繰り返しが重要ですね。

 

最後に、学びの保存です。僕の場合ですが、確かに何かをやっていたけれど振り返って見れば何をしていたのか自分でもわからないことがよくあります。必ず、今やっていることの振り返りをする時間を取りましょう。そして記録して残して置きましょう。プログラミングができる人は周りにたくさんいます。自分が全然できないことが辛くなり、やめたくなることもあるのです。そんな時に過去の自分と比べ、その成長を実感することによって、自分を励ますことができるのです。

 

以上が僕がこの一月ほどの間に感じたことです。これからも日々、学習し、そろそろ実践を増やしていきたいというのが本音ところです。

 

 

 

(*1)他にも、日毎の自分を記録しておくこと、はじめから期待しすぎないこと、成果を学習時間で定めるなどいくらでもできることがあります。しかし、サービスを考えておくことが成長速度、モチベーションという点から一番だと思っています。

ブログ再開しました 

 およそ1年ぶりに再開するこのブログ。どうして再開したのかと言うと、日々を過ごす中で自分がやっていることを言葉にする機会があまりにないと思ったためです。また、相手(ここでは読者の方々)のことを考える機会にもなると思ったという理由もあります。

 去年書いていた内容はどちらかというと自分の悩み、葛藤といった内面の部分を自分なりに吐き出したものでした。当時は自分にとってショックなこと(今思えばとてもしょうもないことですが笑)があったのでブログを書くことが大変な救いでした。

 これからこのブログに書いていくことは、自分の学びのアウトプットです。少しでも多くの人に役立つようなものになればいいと思ってはいますが、まずは自分の役にたつことを目標としています。

習慣への架け橋だー!

 何かをやろうと決めたならそれをやり続けると心に決める必要がある。なぜなら、どれだけ好きなことであっても苦しみや困難があることがよくあるからだ。楽しみだけを感じながら、何かに取り組むことはほとんどないといえる。困難があるからという理由で、やると決めたことをやめてしまうのは時に自分を裏切る行為になりかねない。自分を裏切らないためには、第一に、何をするのか明確にすること、第二に、最低限続ける期間を決めること、第三に、とにかく日々続けることが大切になってくる。前者2つは簡単にできるだろう。(簡単にできるからと言って軽いノリで決めてしまうと後々大変になる可能性はあるが)難しいのは第三の日々続けることである。やることを決めた当初は、やる気に満ち溢れ、簡単にできるだろうと思ってしまう。しかし、人間はすぐに目移りしてしまうものである。(私の20年の人生経験から得た教訓の一つである)それではどうすれば良いのか。これはもう仕組みを作るしかないのではないか。そう私は思っている。仕組みとは、何か。習慣とは少し違う。仕組みは習慣の橋渡しになるものだと思う。楽しくできることは気づけば続いているものであるが、そうでないものは、気づけばやらなくなっている。それを習慣にするために仕組みを用いるのである。

 

仕組みを作るとはつまりやりたくないことでもやってしまう、あるいはやらざるを得ないように生活の中にある作業を組み入れることである。仕組みにも限界はある。時間が限られているのだから、どれだけうまく仕組みを作っても多すぎれば体に悪影響をおよぼすことだろう。ただ私の場合、未だそのような領域には至っていないはずであるから、そのような心配とは無縁である。(私の心配の大部分は、実際にはムダな心配である)

どうすれば仕組みをつくれるのだろう。仕組みを作るには、無理なくある作業に取り組めるようにする、もしくは無理はあってもせざるを得ないように予定を立てる必要がある。例えば、毎日ジョギングがしたいなら、家からジョギングに行くより、仕事帰りにジョギングして家に帰るほうが抵抗がないと思う。そして、電車通勤なら、家から遠い方の車両に乗れば、近いものよりジョギングに移りやすい。

こんな感じにしていくのが仕組みだと思っているが、正直最後の最後は自分の気持ち次第になってしまう気がしないでもない。もっとうまい方法があるのかもしれないが、今はこんな方法しか知らないので、これを続けながら、新しい方法を模索していくつもりだ。ただの根性論より幾分はましであると思える。必要な根性を減らせるという最終的には根性論な仕組み術であった。

 

ーーー話したいことーーー

 世の中いろんな境遇の方々がいる。最近人と話すようになってきたので話す人びとの人生の一部分に触れるようになった。ほんといろんな人生があるのだなって思わされた。中にはそんな生き方辛くないか、なんでわざわざそんな考え方してるんやろ、って思わずにはいられない人もいる。そんな時は、自分の意見を言ってみる。それでだめなら、こういう生き方もあるんだなって思うようにしてるし、思ってしまう。自分の知らない世界が多すぎて、否定できないからだ。

 いろんな境遇の方がいることを以前より理解して、少し変化したのはあまり人の人生を聞いて驚くことがなくなったことだろう。なんだかどんな人生でも、そんなこともあるんだろうな、と思うようになった。もちろん、驚かないからといって、悲しみや喜びがなくなるわけではない。すごい人生には、すごいと思うし、悲しい人生には悲しいと思う。でも、それでも違う世界とか、自分とは違う生き物であるとかは思わなくなった。

 

孤独とつながり

 孤独とは何なのでしょうか。1人であることでしょうか。1人であることだとすると、1人であるということがどういうことなのかを考える必要があるでしょう。今の社会では、人が1人で生きていけるほど、人は強くないはずです。つまり、どんなつながりであれ、必ず誰かとつながっています。そのため、1人であるということを安易に言うことはできないのかもしれません。1人であること、これをより僕なりにより詳細に定義してみます。1人であることはできませんが、1人であると思うこと、感じることはできるでしょう。そして、1人であると感じながら、それが孤独なことであると関連付ける人、これこそが孤独感なのではないでしょうか。つまり孤独とは実際には存在していない人の気持ちなわけです。(存在していないけれども、しているといったほうが良いかもしれません)

 

 そもそも孤独を感じるのはいつでしょうか。多くは、仲の良いものとの別れ(一瞬の別れや永遠の別れなど)の後ではないでしょうか。友と別れたあとは何か心のなかから抜けた気分がします。いまはSNSなどで別れが希薄になったのかもしれません。それでも感じずにはいられないのは、私がSNSが苦手なことの他に、直接会うことの安心感、ここちよさのようなものがとても多いからではないでしょうか。携帯電話がなかった昔、人々はどのような気持ちで過ごしていたのでしょうか。別れが当たり前であり、その別れが突然永遠の別れになりえた。そんな時代の人々、孤独を感じていたのでしょうか、それよりも悲しみを感じていたのでしょうか。それとも一期一会を大切にすべての出逢いと別れに喜びを見出していたのでしょうか。様々な人々がいたことでしょう。

 

 今の時代は、物理的に一人になることはほぼ不可能です。ですが、逆に人生の一つ一つにありとあらゆる人々が関わりすぎて、誰も認識できないようになってきている気がします。例えば、一つのパンができるまでありとあらゆる工程を踏んでいます。其の工程ごとに働いている人々がおり、パンを食べる時その人達のことなど頭には浮かびません。何も問題はないのですが、パンを販売している人のことすら知らないということにもなっています。つまり、つながりの糸はたくさん出ているのですが、そのどれもがあっさりと切れてしまうのです。切れはしないから、この表現は少し違うかもしれません。どれも切れはしない、でもどの糸もほとんど私たちには見えておらず、手繰り寄せることができない。こちらの表現のほうがあっていますね。

 

 

ーーー話したいことーーー

自分の夢が少し見えてきた気がする。それは、誰かの夢の手伝いをすることだ。ほんとに一生懸命に、そして楽しそうに夢や好きなことについて語っている人はとても素敵です。僕は話を聞いているだけで、引き込まれてしまい、癒やされます。微笑まずにはいられません。僕は何もしていないのに、何か心地よくなっちゃうのです。羨ましくも思います。自分には今のところ、そこまで熱中することがなくて自己嫌悪してしまうこともなくはないです。ただそれ以上に、話を聞いている時、がんばれって、できることはやってあげたいなって、思わされちゃうんですよね。ただそういう時、手伝えることってあまりないのかもしれません。だから僕はホントに助けを必要としている時に手を差し伸べられる人になる必要があるのです。

今回はアホな感じです

 確率論と人の意志。人の意志によって確率が変化することはあるのでしょうか。つまり、宝くじやパチンコ、その他あらゆる場面で、当たれ!、と願うことで確率に変化は起こるのでしょうか。

 自分でもアホなこと言っている気がしないでもありません。というか言っているつもりです。しかし、考えてみれば、変化が起こる可能性があってもおかしくはないのではないでしょうか。そんなことがあるならば、宝くじや競馬などのギャンブルは成立しないという意見もあるでしょう。確かにそうですね。でも、本当に少ない確率変化が起こっているならば成立する場合もあるでしょうし、それが現在の賭け事なのかもしれません。 コインの裏がでる確率が1/2の時、途方もない数コインをふれば裏が出る相対頻度は実際に1/2に近づくことがわかる。このような感じで教科書などで説明されているイメージがありますが、大概はコンピュータで計測した値でしょうし、人の手で行ったとしても裏がでろという気持ちで振っていないでしょうから、意志が確率に影響を与えているのかは実際のところわかっていないのではないでしょうか。

 

ーーー話したいことーーー

自分でも、今日の記事は変なこと書いていると思いました。でも、まぁたまには変なこと書いてもいいだろうという気分で書きました。(これまでも変なことを書いている可能性はありますが)なんでこんなことを書こうと思ったのか。それは当たり前は当たり前ではない。ということを考えてみたかったからです。世の中に様々なものが当たり前に思いますが、一つ一つ考えてみると、自分はそのことについて何もしらないのです。そういうものがあるのだ、というふうに思うことで疑うことをやめていたわけであります。これがいけないことではないです。というかいいことでもあるでしょう。一々突っかかっていると、生きていけないでしょうから。ただ、すべての物事に対して、なんとなく受け入れるのはどうなのだろう。せめて、自分の気になったこと、不思議に思うことは考えてみたいなと思った次第です。