めがね屋のエンジニアブログ

日々学んだこと / 課題解決したこと / 思うことなど気軽にアップしております。

【Rails】VCRでハマったエラー「VCR::Errors::UnhandledHTTPRequestError:」の解決方法

こんにちは。

この世の匂いの中で一番好き!と言っても過言でない金木犀
ついに金木犀の香りミストを購入してしまいました。
家に振りまいてやろうと思います。

どうもハチマキです。

はじめに

今回VCRを使った際のエラーに結構ハマってしまいました。
エラー解決を見つけるのに時間がかかったため、今回はこのエラーの解決方法に関して記載していきます。

では早速行きましょう!

本日の概要 : VCR::Errors::UnhandledHTTPRequestError:の解決方法

VCRとは?

テストで使う『HTTP通信』を1回目に記録しておいて、2回目以降のテストでの実行時間を短縮し、効率的なテストを支援してくれるGemです。
具体的に言うと、テスト中に過去に投げたリクエストをカセット(cassete)に記録しておいて、その後再度同じリクエストが投げれられた場合はサーバーではなく、記録しておいたカセットからリクエストの結果を取り出すというものです。

事象

Rspecテストで、別のDBレコードを取得する必要がありVCRのGemを使用しました。
今回は、外部APIとのやりとり情報をテキスト情報で保存して、それをテスト内で読み込みたいがエラーが発生。。。

エラー例

1) testが通ること
     Failure/Error:~~
     
     VCR::Errors::UnhandledHTTPRequestError:

       ================================================================================
       An HTTP request has been made that VCR does not know how to handle:
         GET http://~~
     
       VCR is currently using the following cassette:
         - /Users/アプリ名/spec/vcr/features/~~.yml
         - :record => :once
         - :match_requests_on => [:method, :uri]
     
       Under the current configuration VCR can not find a suitable HTTP interaction
       to replay and is prevented from recording new requests. There are a few ways
       you can deal with this:
     
         * If you're surprised VCR is raising this error
           and want insight about how VCR attempted to handle the request,
           you can use the debug_logger configuration option to log more details [1].
         * You can use the :new_episodes record mode to allow VCR to
           record this new request to the existing cassette [2].
         * If you want VCR to ignore this request (and others like it), you can
           set an `ignore_request` callback [3].
         * The current record mode (:once) does not allow new requests to be recorded
           to a previously recorded cassette. You can delete the cassette file and re-run
           your tests to allow the cassette to be recorded with this request [4].
         * The cassette contains 1 HTTP interaction that has not been
           played back. If your request is non-deterministic, you may need to
           change your :match_requests_on cassette option to be more lenient
           or use a custom request matcher to allow it to match [5].
     
       [1] https://www.relishapp.com/vcr/vcr/v/3-0-0/docs/configuration/debug-logging
       [2] https://www.relishapp.com/vcr/vcr/v/3-0-0/docs/record-modes/new-episodes
       [3] https://www.relishapp.com/vcr/vcr/v/3-0-0/docs/configuration/ignore-request
       [4] https://www.relishapp.com/vcr/vcr/v/3-0-0/docs/record-modes/once
       [5] https://www.relishapp.com/vcr/vcr/v/3-0-0/docs/request-matching
       ================================================================================

原因

今回問題だったのは、VCR is currently using the following cassette:でした。
いわゆるカセットファイル(yml)にすでに同様のファイルが記憶されていたため、エラーが発生しました。
(過去に同様のカセットファイル名でコマンドを実行していたため、記憶されていたのでしょう。)

※定義しているカセットファイル(yml)がないか検索してみましょう。

解決方法

すでに記憶(存在)しているカセットファイル(yml)を削除します。

$ rm spec/vcr/features/~~yml 

これで再度テスト実行したらエラーが解消してました。
ファイルの内容を再度変更したい場合は、作成されているカセットファイルを削除し、再度テスト実行すると新しいカセットファイルが作成されます。

Gulp導入時に発生したエラーを解決していく

こんにちは。

今日から異様に寒くなりました。
でも暖房はまだつけない!負けない!

どうもハチマキです。

はじめに

CoffeeScriptコンパイルする作業が必要だったため、コンパイルを自動化するgulpを導入しました。
今回導入にあたり、いくつかエラーが発生し、ハマった点がありましたのでその解決方法を書いていきたいと思います。
導入までに3つほどエラーが発生しましたが、無事完了しました。

では、早速いきましょう〜!!(〜はチルダと言います)

本日の概要 : Gulp導入時に発生したエラーを解決していく

まずはgulp(ガルプ)とは?

Node.jsをベースとしたビルドシステムヘルパーです。
gulpを使うことで、様々な作業を自動化することができます。

※例えば、Webサイト構築に必要な処理をタスクとして自動化してくれるプログラムで、作業の効率化に使われています。

なぜ自動化が必要なのか?

良くSassやSylusなどのCSSプリプロセッサを使うときや、CoffeeScriptやTypeScriptといったAltJSを使うときなど、コンパイルという作業が毎回必要になります。
コンパイルだけならば各種のコンパイラに付いているwatch機能を利用して変更を監視することはできます。が、コンパイル後に「圧縮・結合して、ブラウザの自動更新も行いたい」と思った場合はどうでしょう。
これらの作業を毎回手動で実行するのは手間がかかるため、これらの作業をgulpのタスクにし、自動化することで作業を効率的に進めることができます。

開発環境の準備

開発環境の準備の前にgulpを導入する上で、注意すべき点を先に述べたいと思います。

注意すべき点は、Node.jsとgulpのバージョンの組み合わせです。
最新のNode.jsをインストールする場合、gulpのバージョンが4以上でないと動きません。
※今回は、nodeのバージョンv10.22.1に合わせてgulpの導入するために、gulpのバージョンを下げて進めていきます。

・パターン例
$ node -v
v10.22.1

$ gulp -v
CLI version: 2.3.0
Local version: 3.9.1
ーーーーーーーーーーーーー
$ node -v
v14.13.1

$ gulp -v
CLI version: 2.3.0
Local version: 4.0.2
手順① Node.jsをインストール
$ brew install node@10 ※今回は10系をインストールしていきます

$ node -v
-bash: node: command not found

まずここで、一つ目のエラーが発生しました。
bash: node: command not foundのエラーを解決するためには、.bash_profileにパスを追加することで解消が出来ます。(エラーがでなければ手順②へ)

下記コマンドを実行していきます。

$ echo 'export PATH="/usr/local/opt/node@10/bin:$PATH"' >> /Users/ユーザ名/.bash_profile #>>はファイル末尾に追記されます

$ source /Users/ユーザ名/.bash_profile  #シェルの設定ファイルを反映させる

$ node -v #再度バージョンを確認すると、無事に確認出来ました
v10.22.1
手順② npmによるインストール
$ npm install
[
audited 687 packages in 4.809s

25 packages are looking for funding
  run `npm fund` for details

found 30 vulnerabilities (9 low, 10 moderate, 11 high)
  run `npm audit fix` to fix them, or `npm audit` for details

$ npm -v
6.14.8

npmはインストール出来ましたが、ここでもエラーが発生しました。
手順③で、2つ目のエラーを解決していきます。

手順③ gulpのインストール

上記エラーを解決するためには、gulpをインストールする必要があります。
下記2つのコマンドを実行していきましょう。

$ npm install -g gulp #gulpをグローバルインストール
$ npm install --save-dev gulp #gulpをローカルインストール

$ gulp -v
CLI version: 2.3.0
Local version: 4.0.2

$ gulp
Requiring external module coffee-script/register
[AssertionError [ERR_ASSERTION] [ERR_ASSERTION]: Task function must be specified

無事にgulpのインストールが完了しましたが、gulpコマンドを実行すると3つ目のエラーが新たに発生しました。

これを解決するためには、冒頭にも記載したバージョンの組み合わせを整える必要があります。
ですので、バージョンを指定し直すことで解決にたどり着けます。

$ sudo npm install --save-dev gulp@3.9.1

$ gulp -v
CLI version: 2.3.0
Local version: 3.9.1

$ node -v
v10.22.1

$ gulp
[15:29:22] Requiring external module coffee-script/register
[15:29:22] Using gulpfile ~/アプリ名/gulpfile.coffee
[15:29:22] Starting 'clean'...
[15:29:22] Starting 'coffee-lint'...
[15:29:22] Starting 'compile-coffee'...
[15:29:22] Starting 'copy-pure-js'...
[15:29:22] Starting 'watch'...
[15:29:22] Finished 'watch' after 34 ms
[15:29:22] Finished 'copy-pure-js' after 79 ms

omg/client/ConvertRecord.coffee
  ✖  line 9   Line exceeds maximum allowed length  Length is 100, max is 80
  ✖  line 46  Line exceeds maximum allowed length  Length is 81, max is 80
  ✖  line 51  Line contains a trailing semicolon
  ✖  line 56  Line contains a trailing semicolon

✖ 4 errors
.
.
.

これで無事gulpが正常に動作し、導入が完了です!
お疲れ様でした。

GitHubのリポジトリからローカル環境にgit cloneする方法

こんにちは。

今年もあと2ヶ月ちょいで終わります。
歳のせいなのか本当に一年が秒で終わっていきます。。

どうもハチマキです。

はじめに

新しいPJや再度Git Hubからコードを落としたい時などによく使うgit clone。
今回はこの手順に関して書いていきたいと思います。

本日の概要 : GitHubリポジトリからローカル環境にgit cloneする方法

事象

新たにコードを落としたい時や、異なるPCで作業したいと時などなど、Git Hubからローカルにコードを複製したい。

※git cloneとは
指定されたディレクトリに元のリポジトリと同じものを複製するコマンドです。
例えば、開発現場に新しく入った人がGithubからソースをコピーして来たい時など、cloneコマンドを使うことになります。

方法

手順は2つのみ。

1つ目:Git HubのリポジトリページからcloneしたいURLをコピーする

矢印のところをクリックし、コピーする。

f:id:hachimaki37:20201013184635p:plain

2つ目:ターミナルでgit cloneする
$ cd test-app #git cloneしたいディレクトに移動

$ git clone git@github.com:hachimaki37/yy-task.git #git cloneにコピーしたURLをそのまま貼り付ける
loning into '~~'...
remote: Enumerating objects: 47, done.
remote: Counting objects: 100% (47/47), done.
remote: Compressing objects: 100% (33/33), done.
remote: Total 7927 (delta 18), reused 29 (delta 14), pack-reused 7880
Receiving objects: 100% (7927/7927), 1.05 MiB | 909.00 KiB/s, done.
Resolving deltas: 100% (4582/4582), done.

これで無事にclone出来ます。

参考資料

GitHubにあるリポジトリをローカルにcloneする方法 - Qiita

                                            • -

日々勉強です。
以上、ハチマキでした。

HTTPとHTTPSの違いは?結局どっちを使うべきなの?

こんにちは。

キンモクセイの匂いが消えてきたと同時に秋も過ぎ去ってしまうのでしょうか。

どうもハチマキです。

はじめに

来年の基本情報試験に向けて現在勉強中で、セキュリティに関する項目を学ぶ機会がありました。
Webエンジニアでありながら、普段使っているWebサイトのHTTPとHTTPSについて。。
この2つの違いってなんだ。?と理解ができていなかったため、これを機に色々調べてみました。

本日の概要 : HTTPとHTTPSの違いは?結局どっちを使うべきなの?

  • 結論
  • HTTPとは?HTTPSとは?
  • HTTPとHTTPSの違いとは?
    • 情報セキュリティの大きな違い?利点とは?
    • HTTPS通信をより深く理解するためには?
  • 最後の一言
  • 参考資料

では早速行きましょう!

結論

結論を最初に述べます!HTTPS通信を使用すべきでしょう!

※費用がかかったり、URLが変わることで変更作業が必要など、デメリットも存在しますが、何よりHTTPよりHTTPSの方が安全性が高く、安全にWebの情報をやり取りすることができます。

HTTPとは?HTTPSとは?

まずは、こちらの2つが何者なのかについてです。

  • HTTP(Hyper Text Transfer Protocol)とは?

端的に言うと、通信規約/通信ルール/通信プロトコルのことを指します。
もう少し具体的に言うと、WebサーバとWebクライアントの間でデータの送受信を行うために用いられる通信規約/通信ルール/通信プロトコルです。

  • HTTPS(Hyper Text Transfer Protocol Secure)とは?

HTTPにSがついただけと思っておりませんか?その通りSがついただけなのです!
が、このSはSecureの頭文字をとったSで、HTTPによる通信をより安全に行うためのプロトコルと非常に重要なSなのです。

※厳密に言えば、HTTPS自体はプロトコルではなく、SSL/TLSプロトコルによって提供されるセキュアな接続の上でHTTP通信を行うことを指します。

HTTPとHTTPSの違いとは?

主な違いは通信内容が暗号化されていないか、されているかの違いです。

端的に、HTTPよりHTTPSの方が安全性が高く、この2つには情報セキュリテイにおける大きな違いが存在します。

情報セキュリティの大きな違い?利点とは?

HTTPは、HTTP通信によってスマホやパソコンからWebページを閲覧するときにはデータが暗号化されていない状態になっているため、通信内容が簡単に漏洩してしまうと言う問題が発生します。(盗聴や改ざん手法が一般化してきていることもあり、HTTP接続だと安全性が不十分です。)


そこで登場するのが、HTTPS通信です。
この通信プロトコルは、データが盗み見られても分からないように暗号化した通信方法を用いているため、安全性の高いプロトコルと言えます。

HTTPSをより深く理解するためには?

HTTPSの安全性がわかったところですが、実は安全性を高めているのはSSLと呼ばれるプロトコルです。

SSLでは、あらかじめ決められた鍵を使って通信に暗号をかけ、その鍵がないと暗号が解除できないような仕組みを作ることで通信の安全性を高めています。
また、SSLサーバ証明書にはサイトの運営者が誰なのかを登録する必要があるため、ユーザはこの証明書を見ることで運営者が信頼のできる相手かどうかを確認することができるのです。

このような仕組みがHTTPSに備わっていることで、通信の安全性を高めています。

最後の一言

セキュリティ面に関しては、まだまだ知見が浅すぎました。
今回基本情報試験を受けることで、初めて目の当たりにすることが多く、自分の弱みをしみじみ認識しました。
計画立ててセキュリティ面の強化もしていきたいと感じた次第です。

【MySQL/エラー】`connect': Can't connect to MySQL server on '~~' (Mysql2::Error)の解決方法

こんにちは。

キンモクセイの匂いがしてきました。あ〜幸せダァ!

どうもハチマキです。

はじめに

今回は、MySQLのエラー解決法に関してです。
エンジニアになりたての時は、なかなか解決できないエラーでしたが、今思えば簡単なエラーでした。日々成長を感じます。

では早速行きましょう!

本日の概要 : `connect': Can't connect to MySQL server on '~~' (Mysql2::Error)の解決方法

事象

ターミナルで、サーバを起動したいのにMySQLエラーが発生した。。
どう解決すればいいんだ。。(涙)

捕捉
  • 初歩的な発生原因は、下記のような原因が考えられます。
    • PCを再起動した時
    • PCをシステム終了し、再度起動した時

エラー例

$ bundle exec rails s
/Users/ユーザ名/アプリケーション名/vendor/bundle/ruby/2.2.0/gems/simple_form-2.1.1/lib/simple_form/inputs/boolean_input.rb:37: warning: circular argument reference - unchecked_value
=> Booting Thin
=> Rails 3.2.22.2 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
Exiting
/Users/ユーザ名/アプリケーション名/vendor/bundle/ruby/2.2.0/gems/mysql2-0.3.20/lib/mysql2/client.rb:70:in `connect': Can't connect to MySQL server on '~~'  (Mysql2::Error)
 from /Users/ユーザ名/アプリケーション名/vendor/bundle/ruby/2.2.0/gems/mysql2-0.3.20/lib/mysql2/client.rb:70:in `initialize'
 from /Users/ユーザ名/アプリケーション名/vendor/bundle/ruby/2.2.0/gems/activerecord-3.2.22.2/lib/active_record/connection_adapters/mysql2_adapter.rb:16:in `new'
 from /Users/ユーザ名/アプリケーション名/vendor/bundle/ruby/2.2.0/gems/activerecord-3.2.22.2/lib/active_record/connection_adapters/mysql2_adapter.rb:16:in `mysql2_connection'
 from /Users/ユーザ名/アプリケーション名/vendor/bundle/ruby/2.2.0/gems/activerecord-3.2.22.2/lib/active_record/connection_adapters/abstract/connection_pool.rb:315:in `new_connection'
 from /Users/ユーザ名/アプリケーション名/vendor/bundle/ruby/2.2.0/gems/activerecord-3.2.22.2/lib/active_record/connection_adapters/abstract/connection_pool.rb:325:in `checkout_new_connection'
 from /Users/ユーザ名/アプリケーション名/vendor/bundle/ruby/2.2.0/gems/activerecord-3.2.22.2/lib/active_record/connection_adapters/abstract/connection_pool.rb:247:in `block (2 levels) in checkout'
 from /Users/ユーザ名/アプリケーション名/vendor/bundle/ruby/2.2.0/gems/activerecord-3.2.22.2/lib/active_record/connection_adapters/abstract/connection_pool.rb:242:in `loop'
 from /Users/ユーザ名/アプリケーション名/vendor/bundle/ruby/2.2.0/gems/activerecord-3.2.22.2/lib/active_record/connection_adapters/abstract/connection_pool.rb:242:in `block in checkout'
 from /Users/yutakayamaki/.rbenv/versions/2.2.4/lib/ruby/2.2.0/monitor.rb:211:in `mon_synchronize'
 from /Users/ユーザ名/アプリケーション名/vendor/bundle/ruby/2.2.0/gems/activerecord-3.2.22.2/lib/active_record/connection_adapters/abstract/connection_pool.rb:239:in `checkout'
 from /Users/ユーザ名/アプリケーション名/vendor/bundle/ruby/2.2.0/gems/activerecord-3.2.22.2/lib/active_record/connection_adapters/abstract/connection_pool.rb:102:in `block in connection'
 from /Users/yutakayamaki/.rbenv/versions/2.2.4/lib/ruby/2.2.0/monitor.rb:211:in `mon_synchronize'
 from /Users/ユーザ名/アプリケーション名/vendor/bundle/ruby/2.2.0/gems/activerecord-3.2.22.2/lib/active_record/connection_adapters/abstract/connection_pool.rb:101:in `connection'
 from /Users/ユーザ名/アプリケーション名/vendor/bundle/ruby/2.2.0/gems/activerecord-3.2.22.2/lib/active_record/connection_adapters/abstract/connection_pool.rb:410:in `retrieve_connection'
 from /Users/ユーザ名/アプリケーション名/vendor/bundle/ruby/2.2.0/gems/activerecord-3.2.22.2/lib/active_record/connection_adapters/abstract/connection_specification.rb:171:in `retrieve_connection'
 ・
 ・
 ・
 省略

原因

今回の問題が発生した原因は、こいつです!!
`connect': Can't connect to MySQL server on '~~'(Mysql2::Error)とエラーログに書いてありますね。

つまりは、MySQLサーバに接続できねーぞ!と言われてます。

解決方法

なので、今回のエラーを解決するには、MySQLを起動(に接続)すれば解決です。

$ sudo mysql.server start #こちらのコマンドでMySQLを起動
Password: #パスワードを入力
Starting MySQL #MySQLが起動します
 SUCCESS! 

最後にサーバを起動すれば無事に動くことでしょう!

$ bundle exec rails s #再度サーバを起動
・
・
・

【勉強会】Cookieとは?Sessionとは?なぜ必要なの?

こんにちは。

シルバーウィークも終わり、もう秋に突入しました。
待っていたよ!Autumn!

どうもハチマキです。

はじめに

Webエンジニアなら知っておくべきSessionとCookie
そもそもちゃんと理解を深めていなかったので、今回勉強会に参加しました。
ここで個人的に学んだことを書いていこうと思います。

では早速行きましょう!

本日の概要 :Cookieとは?Sessionとは?なぜ必要なの?

  • Sessionとは?
  • なぜSessionは必要なのか?
  • Cookieとは?
  • なぜCookieが必要なのか
  • CookieとSessionの関係/違いとは?
  • その他補足
  • まとめ
  • 参考資料

Sessionとは?

Sessionを様々なサイトで調べてみると下記のような定義がされております。

  • Webサイトにアクセスして行う一連の行動
  • ブラウザからページを表示してブラウザを閉じるまでの間の行動
  • 接続を確立してから切断するまでの一連の通信のこと

いわゆるアクセスしてからディスコネクトするまでの一連の行動/通信の管理をSessionというですね。

なぜSessionは必要なのか?

結論、複数(多数)のリクエストを同一ユーザと判断/認識するために必要なのです。

Webデータのやり取りは、クライアントとサーバーの1回のやり取りで処理が完結する、HTTPプロトコルを使用しています(クライアントとサーバー間のリクエストとレスポンス)

よって、サーバーは状態を管理/維持できず(ステートレス)、ユーザが送ったリクエストを覚えていないため、2回目以降リクエストを送っても同一ユーザからのリクエストなのかわからないという問題が発生します。

その問題を解決するために、クライアントに1つのセッションIDを振り、セッション中の管理を容易に行えるようにしています。

Cookieとは?

こちらも同様に定義を調べてみると、

  • ブラウザ(クライアント側)に情報を保存するための仕組み
  • Webサイトからスマホやパソコンに保存される情報
  • アクセスしたウェブサイト(サーバ側)から作成されるファイルで、特定の情報をやり取りするファイル

いわゆるユーザとサーバ間でアクセス情報をやり取りするファイルCookieというですね。

基本的にサーバがCookieを発行し、ユーザに渡す証明書みたいなものです(※クライアント側でも発行可能)

なぜCookieが必要なのか

結論、アクセスしたユーザの情報を保存し、通信がどのユーザからのものか、どういう状態にあるのかを認識するために必要なのです。

WebサイトではCookieを使用して、ユーザのログイン状態を維持したり、ユーザのサイトの利用設定を記憶したり、ユーザの地域に関連する情報を提供することで、オンラインでのユーザーエクスペリエンスを向上させています。

わかりやすい仕組みとしては、会員登録済みのサイトにアクセスした時に、IDやパスワードを事前にブラウザで保存しておけば、IDやパスワードがブラウザに表示されて簡単にログインできます。これもCookieの仕組みを利用したものです。

CookieとSessionの関係/違いとは?

結論:Sessionは目的で、Cookieは手段です。

具体的に言うと、Session(同一ユーザを認識したい)を実現するために、Cookie(ユーザとサーバ間でアクセス情報をやり取りするファイル)という手段を使っている。です!

ブラウザが持っているCookieをサーバに渡すことで、サーバがCookieを読み取り、ブラウザのリクエストがどのユーザからどのような状態できているのかを認識しています。

その他補足

  • キャッシュとは?Cookieとの違いは?

CookieとSessionは、ユーザ情報を保存しているのに対し、キャッシュは表示の高速化のために情報を保存している。
キャッシュは、表示速度を上げることでユーザーを助け、CookieとSessionはユーザーの行動を覚えておくことで、機能のサポートをしてくれています。

  • ローカルストレージとCookieの違い

どちらも概念的にはほぼ変わらないが、特徴が異なる。(ローカルストレージはCookieの後継的技術と言わ、Cookieとは違う特徴を持っている)
ローカルストレージとクッキーの違いは?ローカルストレージはどこで確認できるの?|スタビジ

  • Sessionはセキュリティに気をつけろ!

セッションハイジャックなどの様々なサイバー攻撃が存在する(個別のセッションIDやcookieを使って「なりすまし」行為)

対応策の一例として、セッションIDの有効期限を短くすることで、IDが漏れても不正ログインを軽減できることや基本的にFWを使えば問題が発生しない仕様できていますが、理解を深め、よりセキュアなアプリケーションを開発することを意識する必要がある。
セッションハイジャックとは?その原因と対策を徹底解説

まとめ

今回大きく学んだことは、Sessionは目的でCookieは手段と言うことです。
Webアプリケーションはまだまだ奥が深い。。

【勉強会】ロジカルシンキングで重要をことを個人的に振り返る

こんにちは。

最近もっぱら外で飲むことがなくなりました。寂しい!から飲みたい!

どうもハチマキです。

はじめに

ロジカルシンキングを身につけましょう!よく社会人になるとこの言葉をよく耳にします。私も新卒の時は、耳にタコが出来るくらい言われ続けました。

でもなぜ重要なのでしょうか。コミュニケーションを円滑に取るため?問題解決能力を向上させるため?本当に必要なの?などなど、結構ふわっと思ってた時期がありました。

今回ロジカルシンキングの勉強会に改めて参加し、新たな学びがありましたので個人的に重要だと思ったことをまとめていきたいと思います。

では早速行きましょう!

本日の概要 : ロジカルシンキングで重要をことを個人的に振り返る

結論

今回このブログで私が一番伝えたい結論を述べたいと思います。

ための思考法です。

これらの思考法を向上させることにより、

  • 問題解決能力が高まる
  • 分析力が向上する
  • コミュニケーション能力が高まる
  • 生産性が上がる
  • 提案力が身につく

です!

まず初めにロジカルシンキングとは??

王道の定義について、色々ググって見ると下記のようなことがロジカルシンキングと定義されております。

  • 物事を体系的に整理する筋道を立て、矛盾なく考える思考法
  • 筋道だった合理的な思考様式やその方法論
  • 物事を結論と根拠に分け、その論理的なつながりを捉えながら物事を理解する思考法

ふむふむ。。

ロジカルシンキングを身につけることのメリット

  • 問題解決能力が高まる
  • 分析力が向上する
  • コミュニケーション能力が高まる
  • 生産性が上がる
  • 提案力が身につく
  • 因果関係を正しく把握できる

などなど、ロジカルシンキングを鍛えることで様々なメリットが考えられますので、絶対に身につけるべき能力だと思います。

では、なぜロジカルシンキングは重要なのか??

個人的な結論は、意思決定のスピードを向上させるためです。

大学時代は、論理的に考えろ!と正直あまり言われたことがなく、ロジカルシンキングの重要性を考えるまでもありませんでした。

社会人になり、一つ一つの物事を説明する上で、「それはなんで?」と言われるようになり、非常に苦労したことを覚えています。

では、なぜ社会人になったらロジカルシンキングが重要と言われるようになったのか?コミュニケーションを円滑に取るため?問題解決能力を向上させるため?そんなことを社会人に成り立ての頃は考えてました。

今時、大学生/社会人と区別するつもりもないですが、社会人になって大きく変化したことは、「意思決定(決断)の多さ」です。
ビジネス上では、多くの意思決定を行う必要があり、自身の判断ではどうにもならないことが多々あります。
例えば、意思決定を行う上でメンバー間の議論、上長/代表への説明、クライアントへの提案や問題定義、解決などなど、様々な場面で様々な年代の方々とコミュニケーションをとる必要が出てきます。

また、意思決定に加えスピード感も重要になって来ています。一つの意思決定に何ヶ月もかかってしまうとビジネス上では多くの損害があります。
これらを解決していくためにも、このロジカルシンキングは重要だと考えます。

ロジカルシンキングで重要なことは??

これが今回声を大にして言いたいことでもあり、自分も課題と感じていることです。

ロジカルシンキングで重要なことは、

  1. 自分の頭の中を整理する(自分で考える力)
  2. 相手の頭の中を整理する(人に伝える力)

と新たな学びがありました。

この2点を向上させることが、ロジカルなシンキングを向上させることではないかと思いました。

ここで重要なことは、自分の頭の中を整理(=自分が理解できるように分解)できても、まだ足りません。
なぜなら相手の頭の中を整理できていないため、相手には自分が伝えたいことが伝わらないからです。

重要なことは自分の頭の中で整理すると共に、相手の立場や状況を考えた上で、相手が理解できる言葉に噛み砕きロジカルに伝える必要があるということです。
ただこれが非常に難しい。。

ですが、意識付をしまずは取り組んでいきたいと思います。

まとめ

  • 自分の頭の中を整理する(自分で考える力)
  • 相手の頭の中を整理する(人に伝える力)

これらができることで、思考法から実戦活用できるロジカルシンキングになるような気がしました。
自分の頭で考え、スピーディーに意思決定することが重要になるこれからの時代に、ロジカルシンキングは重要な思考法だと改めて感じた会でした。