Ruby on Rails チュートリアルを完走した

memememomo.hatenablog.com

1日2時間くらいで17日間かかりました。長かった。
演習も全てやりましたが、読み飛ばした文章も割とあっても結構時間がかかりましたね。
内容のクオリティはすごく高くて、初心者が何周かすれば、一通りの基礎知識は身につけられるのではないでしょうか(経験者のサポートは必要かもしれませんが)。
他のフレームワークでもこのレベルのチュートリアルが欲しいですね。
以下、良いと思った点です。

  • gitでバージョン管理して進めていく
  • minitestでテストを書きながら、アプリを開発していく
  • Heroku上にデプロイするので、自分が作ったアプリが公開されている状態になっている
  • ユーザー認証/パスワードリマインダー/画像アップロード/ページネーションなど、実際の開発で必要になってくる機能を一通り実装する

あとは最近発売された以下の書籍もやれば、Rubyistとして必要な基礎知識がかなりつきそうですね。

qiita.com

Rubyは、学習するための手厚いサポートが用意されているのが、とても良いですね。

2017年の振り返り

概要

今更ながら2017年の振り返り、というか気づきや思ったことをまとめておきます。

ビジョンを持つ必要性

自分や周りの人たちのモチベーションの持ち方を見ていて、
熱意を持って幸せに働くためにはビジョンが必要だということに気がつきました。
ビジョンがないと「なんのためにこんなに一生懸命働いているんだろう。。。」といったことに陥りがち。

個人にもビジョンが必要ですし、会社にも(形骸化していない)ビジョンが必要です。
その上で、この二つの方向性が一致する必要もあります。

ここができていれば、各個人が自律的に熱意を持って仕事をすることができます。
できていないと、マネージメントで人の管理が必要になったり、締め切りを設定して圧力をかける必要が出たりします(締め切りは大事ですが)。

企画書を作る必要性

クオリティの高いプログラムやデザインを作れる優秀なクリエイターがいても、そもそもの企画の目的が曖昧だったり共有不足だったりすると、うまくいかないことを痛感しました。

当初は「企画書なんて不要で動いているプロトタイプがあれば大丈夫なんや」と思っていましたが、チームのメンバーが増えてくるごとにそれでは済まない状況になりました。そもそも動いているプロトタイプがバグっていて、それが正しいのかどうか分からない状態になっていたり...

企画の意図や目的などは、きちんと言語化されている状態になっている状態が望ましいです。
そもそも言語化できるところまで考え抜いていることができていなかったというのもありますね。

「言語化されてチームメンバーに共有できる状態を作る」「言語化できるまで企画の目的を考え抜く」ということをするための意味で、企画書は作るべきだと感じました。

人間力の必要性

いくら能力が高い人でも、たいていの仕事は一人で達成することは不可能です。 なのでチームとして働くわけですが、そこで必要になってくるのが人間力です。 チームメンバー全員がある程度持っている必要がありますが、リーダー的なポジションにいる人は顕著に必要になってきますね。人間力が高くないと、能力が高い人でもあまりうまくいっていないケースが見られるような気がしています。

人間力が高い人というのは「謙虚」「尊敬」「信頼」を持っている人と個人的に定義してます(「Team Geek」のHRT)。自分もこれまでにきちんとできていたかというと、まだまだ怪しいので精進していきます。。。

個人的な変化

自分の向き不向き、やりたいことやりたくないことがハッキリして良かったです。
これによって自分の今後の方向性がより明確になりました。

何事も試しにやってみることは大事だなと実感。
うまくいくかいかないかが大事ではなく、自分の特性をハッキリとさせていくことが大事。好きなことや注力したいことが分かってきます。

まとめ

なんだか反省が多くなってしまいましたが、2017年も楽しく過ごせました。
2018年以降もより良く楽しく過ごしていきたいです。

Ruby on Rails チュートリアル 第4版 メモ

railstutorial.jp

第1章

railstutorial.jp

チュートリアルでは、helloアプリ(1.3)、toyアプリ(第2章)、sampleアプリ(第3章から第14章まで)を作る。

Railsをインストールする

https://railstutorial.jp/chapters/beginning?version=5.1#sec-installing_rails

$ gem install rails -v 5.1.2

最初のアプリケーション

https://railstutorial.jp/chapters/beginning?version=5.1#sec-the_hello_application

$ cd
$ mkdir environment
$ cd environment
$ cd ~/environment
$ rails _5.1.2_ new hello_app

Bundler

https://railstutorial.jp/chapters/beginning?version=5.1#sec-bundler

Gemfileでgemのバージョンを指定できる。

bundle installを実行してgemをインストールする。

$ cd hello_app
$ bundle install

rails server

rails serverでRailsサーバを実行する。

$ cd ~/environment/hello_app/
$ rails server

演習 https://railstutorial.jp/chapters/beginning?version=5.1#sec-exercises_rails_server

Model-View-Controller (MVC)

https://railstutorial.jp/chapters/beginning?version=5.1#sec-mvc

MVCの解説。

Hello, world!

https://railstutorial.jp/chapters/beginning?version=5.1#sec-hello_world

演習 https://railstutorial.jp/chapters/beginning?version=5.1#sec-exercises_hello_world

Gitによるバージョン管理

https://railstutorial.jp/chapters/beginning?version=5.1#sec-version_control

Bitbucketにあげる。

デプロイする

Herokuにデプロイする。

Herokuコマンドのインストール。

$ brew install heroku/brew/heroku

演習 https://railstutorial.jp/chapters/beginning?version=5.1#sec-exercises_heroku_step_two

Herokuコマンド

https://railstutorial.jp/chapters/beginning?version=5.1#sec-exercises_heroku_commands

演習 https://railstutorial.jp/chapters/beginning?version=5.1#sec-exercises_heroku_commands

第2章

railstutorial.jp

Toyアプリの設定
https://railstutorial.jp/chapters/toy_app?version=5.1#sec-planning_the_application

UsersのScaffold生成
https://railstutorial.jp/chapters/toy_app?version=5.1#sec-demo_users_resource

MicropostsのScaffold生成
https://railstutorial.jp/chapters/toy_app?version=5.1#sec-a_micropost_microtour

バリデーションの追加
https://railstutorial.jp/chapters/toy_app?version=5.1#sec-putting_the_micro_in_microposts

リレーションの設定
https://railstutorial.jp/chapters/toy_app?version=5.1#sec-demo_user_has_many_microposts

第3章

railstutorial.jp

セットアップ
https://railstutorial.jp/chapters/static_pages?version=5.1#sec-sample_app_setup

Controllerの生成
https://railstutorial.jp/chapters/static_pages?version=5.1#sec-generated_static_pages

テスト
https://railstutorial.jp/chapters/static_pages?version=5.1#sec-red
https://railstutorial.jp/chapters/static_pages?version=5.1#sec-testing_titles

レイアウト
https://railstutorial.jp/chapters/static_pages?version=5.1#sec-layouts_and_embedded_ruby

minitest reporters
https://railstutorial.jp/chapters/static_pages?version=5.1#sec-minitest_reporters

Guardによるテストの自動化
https://railstutorial.jp/chapters/static_pages?version=5.1#sec-guard

第4章

railstutorial.jp

カスタムヘルパー
https://railstutorial.jp/chapters/rails_flavored_ruby?version=5.1#sec-custom_helpers

第5章

railstutorial.jp

ナビゲーション
https://railstutorial.jp/chapters/filling_in_the_layout?version=5.1#sec-adding_to_the_layout

Bootstrap
https://railstutorial.jp/chapters/filling_in_the_layout?version=5.1#sec-custom_css

パーシャル(partial)
https://railstutorial.jp/chapters/filling_in_the_layout?version=5.1#sec-partials

アセットパイプラインのディレクト
https://railstutorial.jp/chapters/filling_in_the_layout?version=5.1#uid584

Sassの構文
https://railstutorial.jp/chapters/filling_in_the_layout?version=5.1#sec-sass

リンクの記述
https://railstutorial.jp/chapters/filling_in_the_layout?version=5.1#sec-layout_links

ルートの設定
https://railstutorial.jp/chapters/filling_in_the_layout?version=5.1#sec-rails_routes

インテグレーションテスト(リンクのテスト)
https://railstutorial.jp/chapters/filling_in_the_layout?version=5.1#sec-layout_link_tests

テストでもApplicationヘルパーを使えるようにする
https://railstutorial.jp/chapters/filling_in_the_layout?version=5.1#sec-exercises_layout_link_tests

ユーザー登録
https://railstutorial.jp/chapters/filling_in_the_layout?version=5.1#sec-user_signup

第6章

railstutorial.jp

モデルを作成するコマンド
https://railstutorial.jp/chapters/modeling_users?version=5.1#code-generate_user_model

サンドボックスモードでUserを作成する
https://railstutorial.jp/chapters/modeling_users?version=5.1#sec-creating_user_objects

Modelのテスト
https://railstutorial.jp/chapters/modeling_users?version=5.1#code-valid_user_test

存在性を検証する
https://railstutorial.jp/chapters/modeling_users?version=5.1#sec-presence_validation

長さを検証する
https://railstutorial.jp/chapters/modeling_users?version=5.1#sec-length_validation

フォーマットを検証する
https://railstutorial.jp/chapters/modeling_users?version=5.1#sec-format_validation

一意性を検証する
https://railstutorial.jp/chapters/modeling_users?version=5.1#sec-uniqueness_validation

一意性のマイグレーション
https://railstutorial.jp/chapters/modeling_users?version=5.1#code-email_uniqueness_index

email属性を小文字に変換してメールアドレスの一意性を保証する
https://railstutorial.jp/chapters/modeling_users?version=5.1#code-email_downcase

セキュアなパスワードを追加する
https://railstutorial.jp/chapters/modeling_users?version=5.1#sec-a_hashed_password

ユーザーの作成と認証
https://railstutorial.jp/chapters/modeling_users?version=5.1#sec-creating_and_authenticating_a_user

第7章

railstutorial.jp

デバッグ用の表示を設定
https://railstutorial.jp/chapters/sign_up?version=5.1#sec-rails_environments

Usersリソースをroutesファイルに追加する
https://railstutorial.jp/chapters/sign_up?version=5.1#code-users_resource

byebugによるデバッガメソッド
https://railstutorial.jp/chapters/sign_up?version=5.1#sec-debugger

Gravatarの導入
https://railstutorial.jp/chapters/sign_up?version=5.1#sec-a_gravatar_image

form_forを使用する
https://railstutorial.jp/chapters/sign_up?version=5.1#sec-using_form_for

ユーザー登録
https://railstutorial.jp/chapters/sign_up?version=5.1#sec-unsuccessful_signups

Strong Parameters
https://railstutorial.jp/chapters/sign_up?version=5.1#sec-strong_parameters

エラーメッセージ表示
https://railstutorial.jp/chapters/sign_up?version=5.1#sec-signup_error_messages

失敗時のテスト
https://railstutorial.jp/chapters/sign_up?version=5.1#sec-a_test_for_invalid_submission

ユーザー登録成功
https://railstutorial.jp/chapters/sign_up?version=5.1#sec-successful_signups

flash
https://railstutorial.jp/chapters/sign_up?version=5.1#sec-the_flash

データベースのリセット
https://railstutorial.jp/chapters/sign_up?version=5.1#sec-the_first_signup

成功時のテスト
https://railstutorial.jp/chapters/sign_up?version=5.1#sec-a_test_for_valid_submission

本番環境でのSSL
https://railstutorial.jp/chapters/sign_up?version=5.1#sec-ssl_in_production

本番環境用のWebサーバー
https://railstutorial.jp/chapters/sign_up?version=5.1#sec-production_webserver

第8章

railstutorial.jp

Sessionsコントローラを作成
https://railstutorial.jp/chapters/basic_login?version=5.1#sec-sessions_controller

ログインフォーム作成
https://railstutorial.jp/chapters/basic_login?version=5.1#code-login_form

ユーザーの検索と検証
https://railstutorial.jp/chapters/basic_login?version=5.1#sec-finding_and_authenticating_a_user

ログイン
https://railstutorial.jp/chapters/basic_login?version=5.1#sec-logging_in

レイアウトの変更をテストする、has_secure_password準拠のdigestメソッドを定義する
https://railstutorial.jp/chapters/basic_login?version=5.1#sec-testing_layout_changes

第9章

railstutorial.jp

記憶トークンと暗号化
https://railstutorial.jp/chapters/advanced_login?version=5.1#sec-remember_token

  • 記憶トークン(remember token)を生成
  • cookiesメソッドによる永続cookiesの作成
  • 記憶ダイジェスト(remember digest)によるトークン認証

ログイン状態の保持
https://railstutorial.jp/chapters/advanced_login?version=5.1#sec-login_with_remembering

個別のcookiesは1つの「value(値)」と、オプションの「expires(有効期限)」からできている。

ログアウト
https://railstutorial.jp/chapters/advanced_login?version=5.1#sec-forgetting_users

インテグレーションテストのヘルパー
https://railstutorial.jp/chapters/advanced_login?version=5.1#sec-testing_the_remember_me_box

永続ログインをテストする
https://railstutorial.jp/chapters/advanced_login?version=5.1#sec-testing_the_remember_branch

Herokuでメンテナンスモード
https://railstutorial.jp/chapters/advanced_login?version=5.1#sec-advanced_login_conclusion

第10章

railstutorial.jp

編集フォーム
https://railstutorial.jp/chapters/updating_and_deleting_users?version=5.1#sec-edit_form

新規と編集のフォームの共通化
https://railstutorial.jp/chapters/updating_and_deleting_users?version=5.1#sec-exercises_edit_form

編集の失敗
Ruby on Rails チュートリアル:実例を使って Rails を学ぼう

TDD
https://railstutorial.jp/chapters/updating_and_deleting_users?version=5.1#sec-successful_edits

_form.html.erbで、signupのurlの設定が外れるので、テストが失敗していた。演習でやった部分なので、チュートリアルでは言及されていないっぽい。

ログインを要求する
https://railstutorial.jp/chapters/updating_and_deleting_users?version=5.1#sec-requiring_logged_in_users

正しいユーザーを要求する
https://railstutorial.jp/chapters/updating_and_deleting_users?version=5.1#sec-requiring_the_right_user

フレンドリーフォワーディング
https://railstutorial.jp/chapters/updating_and_deleting_users?version=5.1#sec-friendly_forwarding

未ログイン状態で、ログインが必要なページにアクセスしたら、ログインページにリダイレクトする。その際にURLを保存しておき、ログイン後にリダイレクトするようにする。

fakerを使ってサンプルユーザーを作成
Ruby on Rails チュートリアル:実例を使って Rails を学ぼう

ページネーション
https://railstutorial.jp/chapters/updating_and_deleting_users?version=5.1#sec-pagination

ユーザー一覧のテスト
https://railstutorial.jp/chapters/updating_and_deleting_users?version=5.1#sec-users_index_test

管理ユーザー
https://railstutorial.jp/chapters/updating_and_deleting_users?version=5.1#sec-administrative_users

ユーザー削除テスト
https://railstutorial.jp/chapters/updating_and_deleting_users?version=5.1#sec-user_destroy_tests

第11章

railstutorial.jp

AccountActivationsリソース
https://railstutorial.jp/chapters/account_activation?version=5.1#sec-account_activations_resource

送信メールテンプレート
https://railstutorial.jp/chapters/account_activation?version=5.1#sec-account_activation_emails

Railsのメールプレビュー機能
https://railstutorial.jp/chapters/account_activation?version=5.1#sec-email_previews

メール送信テスト
https://railstutorial.jp/chapters/account_activation?version=5.1#sec-email_tests

メタプログラミングでメソッド名で変数を使って呼び出す
https://railstutorial.jp/chapters/account_activation?version=5.1#sec-generalizing_the_authenticated_method

有効化のテスト
https://railstutorial.jp/chapters/account_activation?version=5.1#sec-activation_test_and_refactoring

Herokuでメール送信
https://railstutorial.jp/chapters/account_activation?version=5.1#sec-activation_email_in_production

PostgreSQLでdatetime型が使えないようなので、Herokuでのmigrateでエラーが起こる。ひとまずtimestampに変更したら、エラーを回避できた。

第12章

railstutorial.jp

パスワード再設定テスト
https://railstutorial.jp/chapters/password_reset?version=5.1#sec-password_reset_test

期間切れのテスト
https://railstutorial.jp/chapters/password_reset?version=5.1#code-password_reset_expire_test

第13章

railstutorial.jp

has_manyのmodelを生成
https://railstutorial.jp/chapters/user_microposts?version=5.1#code-generate_micropost_model

belongs_to/has_manyを設定すると使える機能
https://railstutorial.jp/chapters/user_microposts?version=5.1#table-association_methods

マイクロポストを時間順に取得できるようにする
https://railstutorial.jp/chapters/user_microposts?version=5.1#sec-ordering_and_dependency

ユーザーを削除したときにマイクロソフトも削除されるようにする
https://railstutorial.jp/chapters/user_microposts?version=5.1#sec-dependent_destroy

マイクロポストを表示する
https://railstutorial.jp/chapters/user_microposts?version=5.1#sec-showing_microposts

マイクロポストのサンプル
https://railstutorial.jp/chapters/user_microposts?version=5.1#sec-sample_microposts

マイクロポストのテスト
https://railstutorial.jp/chapters/user_microposts?version=5.1#sec-profile_micropost_tests

マイクロポストを作成する
https://railstutorial.jp/chapters/user_microposts?version=5.1#sec-creating_microposts

フィードを作成
https://railstutorial.jp/chapters/user_microposts?version=5.1#sec-a_proto_feed

redirect_back(fallback_location: root_url)
https://railstutorial.jp/chapters/user_microposts?version=5.1#sec-exercises_destroying_microposts

フィード画面のマイクロソフトをテスト
https://railstutorial.jp/chapters/user_microposts?version=5.1#sec-micropost_tests

画像投稿
https://railstutorial.jp/chapters/user_microposts?version=5.1#sec-micropost_images

画像の検証
https://railstutorial.jp/chapters/user_microposts?version=5.1#sec-image_validation

画像のリサイズ
https://railstutorial.jp/chapters/user_microposts?version=5.1#sec-image_resizing

テスト時のみリサイズ機能をオフにする設定
https://railstutorial.jp/chapters/user_microposts?version=5.1#code-skip_resize_initializer

S3に画像をアップロード(本番環境)
https://railstutorial.jp/chapters/user_microposts?version=5.1#sec-image_upload_in_production

本番デプロイ時に LoadError: cannot load such file -- fog というエラーが出た。Gemfileに

gem 'fog'

を追加したら直った。

第14章

railstutorial.jp

Ajax
https://railstutorial.jp/chapters/following_users?version=5.1#sec-a_working_follow_button_with_ajax

ステータスフィード
https://railstutorial.jp/chapters/following_users?version=5.1#sec-the_status_feed

各種プログラミング言語に対する個人的雑感2017

C#

Unityで使えるし、サーバサイドも書けるし、XamarinでiOSAndroidのアプリが作れるし、Windowsアプリが作れるし、コスパが良い。
変な文法がない。
柔軟なこともできる。

Javascript

Chrome拡張かけたり、サーバサイド書けたり、Googleスプレッドシートのマクロかけたり、Electronでアプリが作れたりするから、結構コスパが良い。
生のJavascriptを書きたくない感。
でもAltJSを使い始めるとそれはそれでだいぶ面倒臭い。
ツールチェーン周りのトレンドが変化しすぎてて、ちょっと目を離すとベストプラクティスがなんなのか分からなくなる。

Scala

なんかかっこいい。 関数型しすぎているライブラリをみるとげんなりする。
ちょっと読みづらい。
情報が少ない。
敷居が高い。
ほぼPlayFramework一択なのが良さげ。

Ruby

Ruby on Rails一択なのが良い。
柔軟に書けるのが良い。
気持ちよく書ける。
便利なライブラリがたくさんある。
コミュニティ楽しそう。

Python

インデントで見やすくなるのが良い。
__name__ == '__main__':好き。
ちょっとしたバッチスクリプト書くのに使うと便利。

Go言語

シンプルで良さげ。
シンプルすぎて面倒なところがある。テストとかジェネリクスとか。
継承とか純粋にはできないので、頭の切り替えが難しい。
並列処理を書く時にgoroutineは便利かも。

C/C++

もっと書けるようになると便利だろうけど、ゴリゴリ書くことは今後もなさそう。
Cocos2dを使う可能性はあるので、C++は触りそう?
STLにあるライブラリは勉強したい。

Rust

Genericsあるみたいだし、Go言語より便利そう?
あんま流行っていない気がする。

Haskell

使えるとカッコよさそうだけど、今後ゴリゴリ書くことはなさそう。

PHP

Laravelとかよさそう。
なんだかんだで良い言語。
今後も仕事で書いたりしても良いかも。
Hackはどうなったんだろう。

Java

好きでも嫌いでもない。
今後書くことはあるのかなぁ。
ScalaとKotlinがあるので、自主的に勉強することは今後はなさそう。
UnityのPluginで書くことがあるかもしれない。

Kotlin

守備範囲が広がってきたら、使い始めるかも。
JetBrains社の製品はIntelliJとRider使っているから期待。
シンプルにかけて良さそう。

Swift

iOSアプリしか作れないからコスパ悪そう。
言語自体は楽しそう。
サーバサイドの環境はまだまだそう(あまり話を聞かないから)。
ググるとSwiftとObjective-Cの情報が入り混じるので不便。

Lua

ゲームの作成の効率化で、使うことになりそう。
シンプルで良さげ。

Perl

もう書かなくなったけど、とてもお世話になった言語なので、リスペクトを忘れない。

仕事で必要な技術力を高めるための活動

概要

仕事で必要になってくる技術力は、本を読んだりするだけでは高まらないものです。
どのようなことをすれば 実践的な技術力を高めていけるのかを考えてみました。

仕事で必要な技術力とは

仕事で必要な技術力とは以下のようなものです。

  1. 作るべきモノ(ゴール)から逆算する力
  2. プログラムを読んで理解する力

作るものから逆算する力

仕事では「こういうシステムを作ってください」「こういう機能を追加してください」といった形で依頼されます。
行き当たりばったりでプログラムをすぐに書いてしまうと、うまくいかないことが多いです。
プログラムを書く前に、依頼された「システム」や「機能」から、どのようなプログラムを書く必要があるかを整理する必要があります。
つまり、作るもの(ゴール)から逆算するということです。

システム単位で考えるなら、要件定義や機能一覧を作るところから始まります。
機能単位で考えるなら、クラス設計やDB設計をするところから始まります。

つまり、作るものを決めて、実装する練習をすれば良いわけです。
具体的には、以下のような活動をすると良いでしょう。

  1. 自分が作りたいものを作る
  2. 既存のサービスやソフトウェアのクローンを作る

1.がある場合は問題ないですね。

2.は作るべきものがはっきりしているので取り組みやすいですね。
自分が作りたいものが特にない場合はこの方法をとると良いでしょう。
既存のものを触ってみて、どのような動きをするのかを確認して、同じ動きになるように実装しましょう。

プログラムを読んで理解する力

仕事では、すでにあるシステムの改修をすることが多いです。
改修をするためには、すでにあるプログラムがどのような仕組みになっているか理解する必要があります。
この時に必要になってくるのが「コードを読んで理解する力」です。

すでにあるプログラムをきちんと理解しないと思わぬバグを入れ込んでしまう可能性があります。
また読むためにはちょっとしたコツや慣れが必要だったりします。

この力を高めるために必要なのが以下のような活動です。

普段自分が使っているライブラリやソフトウェアがオープンソースであるなら、そのプログラムを読んでみることです。
コツとしては普段自分が使っている機能やメソッドなどから調べることです。
すでに動作が分かっている状態なので、理解できる可能性が高まります。
ちょっとしたバグを発見できたら、プルリクを送ってみると良いでしょう。

その他に必要な能力

仕事では技術力の他に以下のような能力も必要になりますが、今回は触れていません。

「まんがでわかる自律神経の整え方」を読んだ

最近、自分にとって向いていないことを仕事でやることが多くなりました。
気持ち自体は前向きに頑張って行こうと思っているのですが、
喉のつまりを感じたり心臓がバクバクしたりすることが増えました。
こういった症状を解消したいと思い軽くググったところ 「自律神経の乱れ」が原因だということが分かりました。
ということで基礎知識を得るために「まんがでわかる自律神経の整え方」を読みました。

漫画形式になっているので、必要な基礎知識と普段の生活でどのようなことに気をつければ良いのかが、すぐに分かるようになっていました。
季節の変わり目などにも自律神経の不調が起こるということなので、最近の自分の不調の要因は単にそれだけのような気がしないでもないです。

読書メモ

自律神経について

自律神経とは、神経系自体が制御する神経のこと。血液や呼吸、代謝や体温調整などを24時間休みなくコントロールしている。

自律神経の乱れは以下のような原因がある。

  • 過度なストレス
  • 不規則な生活
  • 食生活の乱れ
  • 運動不足
  • 睡眠不足
  • 喫煙や深酒
  • 季節の変わり目
  • 気圧の変化

自律神経は、「交感神経」と「副交感神経」に分けられる。
交感神経は車でいうところのアクセル、副交感神経はブレーキにあたる。
体内時計に合わせて生活することが、自律神経を整える第一歩。

腸について

腸はとても精神的な影響を受けやすい。プレッシャーを受けるとお腹が痛くなるなど。
腸内環境を整えると自律神経やメンタルも安定する。

日々やると良いこと

  • 緊張や怒りをコントロールしたいときは、手のひらをゆっくりと広げる。日常でもペンをもつ時など親指の力を抜くことを意識する。
  • 水を飲むと胃腸を刺激し、副交感神経の働きを高めて緊張をほぐせる。
  • 1日1〜2リットル飲む。
  • 口角を上げる
  • 背筋を伸ばして、空を仰ぎ見る
  • 1:2の長さで吸って吐く
  • 関係のないものに集中する
    • 時計のデザインをみる
    • 窓の外をみる
  • ゆっくり動く
  • 感謝の念をもつ
  • 待ち合わせ時間の15分前に着くようにする
  • 早寝早起き
  • 3食食べる時間を決める
  • ゆっくり噛んで食べる
  • 寝る前
    • 明日の着ていく服を用意する
    • セルエクササイズをする
  • 時間を決めて部屋の片付け
  • スマホを見ない
  • 湯船に浸かる
    • 最初の5分は肩まで浸かる
    • 10分はみぞおちの半身浴
    • コップ一杯を飲む
    • コップ一杯の水を飲む
    • 寝たままストレッチをする
    • 日光を浴びる
    • 朝ごはんを食べる。ヨーグルト+オリゴ糖がおすすめ
    • 水溶性の食物繊維(納豆、キャベツ、大根、海藻類、熟したフルーツ、かぼちゃ、アボガド)
  • 自律神経は必ず起こるもの。それを整える力があるかどうかが重要
  • 店員さんと無駄な会話をしてみる
  • 「まあいいか」と無責任に考える

Promiseの利点を手っ取り早く説明する

Promiseの細かい説明は以下のドキュメントに譲ります。 azu.github.io

この記事では、Promiseを使うとどのような嬉しいことがあるのかを簡単に説明します。

setTimeoutを使って、1秒ごとに「1」「2」「3」「4」と表示するプログラムを書く場合を考えます。
Promiseを使わずに従来の方法で書いた場合、以下のようにコールバックのネストの形になります。

setTimeout(function() {
    console.log("1.");
    setTimeout(function() {
        console.log("2.");
        setTimeout(function() {
            console.log("3.");
            setTimeout(function() {
                console.log("4.");
            }, 1000);
        }, 1000);
    }, 1000)
}, 1000);

コールバックのネストはとても読みづらいです。

同じ処理をするプログラムをPromiseを使って書くと、以下のようにthenメソッドのメソッドチェーンの形になります。

var promise = new Promise(function(resolver) {
    setTimeout(function() {
        console.log("1.");
        resolver();
    }, 1000);
});
promise
.then(function() {
    return new Promise(function(resolver) {
        setTimeout(function() {
            console.log("2.");
            resolver();
        }, 1000)
    });
})
.then(function() {
    return new Promise(function(resolver) {
        setTimeout(function() {
            console.log("3.");
            resolver();
        }, 1000);
    });
})
.then(function() {
    return new Promise(function(resolver) {
        setTimeout(function() {
            console.log("4.");
            resolver();
        }, 1000);
    });
});

少々冗長になってしまいましたが、コールバックのネストよりは分かりやすいですね。
非同期処理の流れが逐次実行処理のプログラムのように、上から流れるように処理を追うことができるようになっています。

さらにPromiseでは、各処理で値を引き回したり、catchメソッドで例外をキャッチできたりします。
それについては冒頭のページを参照してもらうとどのようになっているか分かります。

まとめ

Promiseを使うと、非同期処理の一連の流れをメソッドチェーンの形で書けるようになります。
そうすると、逐次処理のプログラムと同じように上から下に処理を追うことができるようになります。
これは、ネストされたコールバックのプログラムより読みやすい形になります。