「アウトプットと言う名の備忘録@Texas」

日本じゃない何処かの脳筋パイソニスタによる何かしらの走り書き

【Git】リモートブランチにcheckout する方法 ~git fetch をお忘れなく~

駆け出しからベテランプログラマーまで、コードに触れる人であればなくてはならないのがバージョンコントロール【Git】

f:id:At_sashimi_py:20190903031555p:plain:w400

駆け出しの方であれば多くのコマンドにアレルギー反応を示し、経験者であっても、ふっと自信がなくなりググってしまう。

そんな経験はないでしょうか。

私は日常茶飯事です。

なので今回は、

以前個人的に少し詰まった

リモートブランチにcheckout する方法を

注意点を踏まえ

ここに書き残します。

シナリオ

とあるアプリケーションを共同で開発しているチームメイトからのcodereviewを自分の慣れ親しんだローカルの環境でやりたい。

ターゲットブランチ名

taros_branch

手段

ローカルの自分の他のブランチと同じように

git switch taros_branch

git-scm.com

注意点(詰まりポイント

ただ前準備なしでこのコマンドを実行するとGitさんに

error: pathspec 'taros_branch' did not match any file(s) known to git
f:id:At_sashimi_py:20220117055109p:plain:w200
そんなブランチうちは知りまへん!

と怒られてしまうので、
事前に

git fetch

ターゲットブランチを自分のローカルにFetchするのを忘れないようにしよう!

fetch についてはこちらをご覧ください。
atsashimipy.hatenablog.com



それではGitと良い1日を!
ありがとうございましたー!

【Flask超入門】その2:jsonifyで超簡単にREST APIをビルドする

atsashimipy.hatenablog.com

前回のFlaskの記事から2年近く開いてしまいました脳筋ニシキです。

f:id:At_sashimi_py:20210809115236p:plain
大変申し訳ありませんでしたーーーーー!🙇🏻‍♂️

その記事の終わり際に、

次回はもっとhtmlを書いて、それっぽい形にしていきましょう!

とかぬかしつつ、この2年の間フロントエンドはReactで書き、Flaskは基本フロントエンドから叩かれた時にapiを返すバックエンドとして使用してきました。


なので今回は予定を変更して、Flaskで超簡単にREST APIをビルドする方法をここに書き残していこうと思います!

では早速参ります。

前回のおさらい

#flask_project.py

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello():
    return "<h1>Hello World!!</h1>"


if __name__ == '__main__':
    app.run(debug=True)


でこのfileをrunすると

速攻でHello Worldできるお手軽さ!さすがFlaskの兄貴!🙆🏻‍♂️

f:id:At_sashimi_py:20191013090528p:plain
Hello World!!

ただ今回、Flask兄貴にはバックエンドに徹してもらいます🙇🏻‍♂️

text/html ではなく application/jsonが欲しい!そんな時のjsonify!

上で見た、html で表現されたHello World も素敵なのですが、今回は HTTP Content-type: application/jsonで返してもらいます。

まず、jsonify を インポートします。
flask.palletsprojects.com

#flask_project.py

from flask import Flask, jsonify


このjsonifyを使うことで簡単に Content-type: application/json のレスポンスを返すことができるようになります!

なので、先程のコードを以下のように書き換え、

#flask_project.py

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello():
    hello_api = {
        'greeting': "Hello World!"
    }
    return jsonify(hello_api)

if __name__ == '__main__':
    app.run(debug=True)

localhostにリクエストを送ると

curl  http://localhost:5000/
{
  "greeting": "Hello World!"
}

肝心のContent-Typeは...

curl  -v http://localhost:5000/

Content-Type: application/json

簡単にREST APIをビルドすることができました。

さすがFlaskの兄貴!目立たない裏方でもサクッとスマートこなしちまうぜ!

こっから先のフロントエンドは私Reactにお任せくだせい!🙋🏻‍♂️


と、このようにバックエンドからフロントエンドへのデータの受け渡しが簡単にできるようになりました!!


今回は基本中の基本でしたが、次回はやや応用編を攻めていこうと思います!

ありがとうございました!

【Pandas最強説2】リストを含むDataFrameを展開するのが超絶簡単だった!

結論

DataFrame.explode(column, ignore_index=False)メソッドを使う事でDataFrameに含まれるリストを展開、中身の値を列へと変換できるようになっていた!(注意:バージョン 0.25.0から)

pandas.pydata.org


実際に使ってみる

動作環境

Python 3.6
Pandas 1.1.3

シナリオ

とあるスーパーで売れた商品をスプレッドシートで細かく把握したい。

       customer                  items
0  customer-000  [Milk, Eggs, Bananas]
1  customer-001  [Chicken, Beef, Pork]
2  customer-002                  Pasta

ただこのままCSVに変換してしまうと

f:id:At_sashimi_py:20201029061947p:plain
リストのまま1つのセルに泣

リストがそのまま1つのセルに。。

そのリストを縦に展開してこうしたい!

       customer    items
0  customer-000     Milk
0  customer-000     Eggs
0  customer-000  Bananas
1  customer-001  Chicken
1  customer-001     Beef
1  customer-001     Pork
2  customer-002    Pasta

実践


とりあえずimport

import pandas as pd

テストDataframe

df = pd.DataFrame(
    columns=['customer', 'items'],
    data=[
        ['customer-000', ['Milk', 'Eggs', 'Bananas']],
        ['customer-001', ['Chicken', 'Beef', 'Pork']],
        ['customer-002', 'Pasta']
    ]
)


あとは例のDataFrame.explode(column, ignore_index=False)メソッドを使い展開したいコラムを指定すれば、

exploded_df = df.explode("items")

たったの1行て!?

print(exploded_df)
       customer    items
0  customer-000     Milk
0  customer-000     Eggs
0  customer-000  Bananas
1  customer-001  Chicken
1  customer-001     Beef
1  customer-001     Pork
2  customer-002    Pasta

欲しかったやつ!


あとお馴染みのdDataFrame.to_csv()
pandas.pydata.org


exploded_df.to_csv('explode_test.csv')
f:id:At_sashimi_py:20201029061902p:plain
簡単すぎてもう、ありがとう!


本当にもうPandasさんありがとうございますっ!!



というわけで、以上DataFrame内のリストを縦に展開する方法でした!

今日も頭のいい先人たちに感謝!



前回の【Pandas最強説】記事はこちら
atsashimipy.hatenablog.com

【Codingインタビュー対策】Python で文字列あれこれ!〜自責の念を込めて〜

お久しぶりです。

ここのところ転職活動に注力していた脳筋ニシキですが、
ありがたいことに

アメリカはテキサス州にある、とあるテック企業から

内定をいただくことができました!

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

今回はCoding インタビューで出題された

Python での String 操作

について少し自責の念を込めて触れていきたいと思います。

Coding インタビュー対策は日々 HackerRank で問題を解きまくっていたので

「まぁいけるっしょ!」

と完全になめてかかってたのですが、
いざ本番になってみると、細かい部分がさっと思い出せなかったり、ググっていいのかよくわからなかったり(普通に聞けばよかった)、そんなこんなで時間がみるみる過ぎていくという散々な結果に繋がってしまったのですが、幸いにも、今回のインタビューでは思考法やどう問題にアプローチするかに重きが置かれていたようで、ギリなんとかなりました

ただ、やはり悔しい!

ゆうても基礎中の基礎とも言える 文字列操作。これは瞬発的に回答できるようになりたい!
という事で
公式ドキュメントを参考に
復習タイムです。
f:id:At_sashimi_py:20191117112122p:plain

対象者

  • Python 初心者
  • 初めてのCoding インタビューを控えてる方
  • 文字列操作の基本を抑えたい方

環境

MacBook Pro (macOS Mojave)
Python 3.7

それでは見ていきましょう!
(間違えている点や、こっちの方がいいよーなどのアドバイスなどがありましたらお手数ですが、コメントしていただけると幸いかつ私の勉強になります!)

置換:str.replace(old, new, count)

文字列からoldを探しnewと置換します。
countの部分はオプションで、指定した数字分だけ頭から置換します。


では次の例題を見てみましょう。

例題

"I would like to eat sushi"
のように与えられた文字列の
"半角スペース"

"-"
を入れ替えて
"I-would-like-to-eat-sushi"
のような文字列を返そう。

解答例

def replace_ex(givne_string):
    new_string=givne_string.replace(' ','-')
    return new_string

print(replace_ex('I would like to eat sushi'))

#I-would-like-to-eat-sushi

解答例の解説

問題文そのままでreplace()を使って、
半角スペースを第一引数にとり、
第二引数に”-”を代入し、
半角スペースと”-”を取り替える。以上。

検索:str.find(sub, start, end)

文字列に sub が含まれる場合、その sub の一文字目の index を返します。オプション引数 start および end はスライス表記と同様に解釈されます。 sub が見つからなかった場合 -1 を返します。

公式のドキュメントにも書かれていますが、sub が部分文字列であるかどうかのみ知りたい場合は以下のように "in 演算子" を使いましょう。

>>> 'Py' in 'Python'
True

では次の例題を見てみましょう。

例題1

"afaweasfsushias" のように与えられた文字列に"sushi" というsubstring が含まれていた場合、最初の index をPrint せよ。
1つも含まれていない場合は "No" をPrint せよ。

解答例

def find_ex(givne_string, sub_string):
    index = givne_string.find(sub_string)
    if index != -1:
        print(index)
    else:
        print("No")
    return

givne_string = "sushifasfareasushifasushisuhisushi"
sub_string = "sushi"


find_ex(givne_string, sub_string)
#7

givne_string = "sushifasfareasushifasushisuhisushi"
sub_string = "sashimi"

find_ex(givne_string, sub_string)
#No

解答例の解説

if文を使ってfind() で返した index が -1 (つまりsubが文字列内に存在しない)ではないとき、index をPrint し、それ以外では "No" を吐きだします。

例題2

"afaweasfsushias" のように与えられた文字列に"sushi" というsubstring が含まれていた場合、全てのindex を Print せよ。
1つも含まれていない場合は "No" を Print せよ。

解答例

def find_multiple(givne_string, sub_string):
    index = givne_string.find(sub_string)
    if index != -1:
        index = 0
        while index != -1:
            index = givne_string.find(sub_string, index)
            if index != -1:
                print(index)
                index += 1
    else:
        print("No")
    return

sub_string="tomato"
find_multiple(givne_string, sub_string)

#No

sub_string="sushi"
find_multiple(givne_string, sub_string)

#7
#14
#23

解答例の解説

例題1と同様にif文を使っていきます。
Point は while ループを使ってsub が文字列内に存在し続ける限り index を1ずつ増加させながら回し続ける点。

分割:str.split(sep=None, maxsplit=-1)

文字列を第一引数の sep で区切った文字列のリストを返します。オプション引数のmaxsplit を指定すると maxsplit 回分割されます。 maxsplit を指定しない,もしくは -1 に設定すると全ての sep で分割されます。

兎にも角にも使ってみましょう。

例題

与えられた英文から単語の出現回数順に並べたリストを返す関数"common_words" を完成させよう。(与えられる英文の単語間は半角スペースとする。)

特に意味はないですがシェイクスピアの名言をここでは使わせていただきます。

'A fool thinks himself to be wise, but a wise man knows himself to be a fool'
『愚者は己が賢いと考えるが、賢者は己が愚かなことを知っている』

な、なるほど。。
ちなみに出現回数が同じものに関しての並びについては、ここでは気にしません。

解答例

from collections import Counter

def common_words(shakespeare_words):
    words_list = shakespeare_words.lower().split(' ')
    c = Counter(words_list).most_common()
    common_list = [i[0] for i in c]

    return common_list

shakespeare_words = 'A fool thinks himself to be wise, but a wise man knows himself to be a fool'
print(common_words(shakespeare_words))

#['a', 'fool', 'himself', 'to', 'be', 'thinks', 'wise,', 'but', 'wise', 'man', 'knows']

解答例の解説

  1. split(' ') で単語ごとに区切り、大文字小文字の区別をなくすため全て小文字にしつつリスト化。
  2. Counterでリストの各単語の出現個数をカウント。
  3. Counter の most_common() で、(単語, 出現回数)という形のタプルを出現回数順に並べたリストを取得。
  4. 欲しいのは単語だけのリストなのでリスト内包表記で取り出す。

連結:str.join() もしくは ”+ 演算子

str.join(iterable)

リストや、タプルを文字列に変換したい場合よく使います。

"iterable" にはリストや、タプルを、"str" の部分にはセパレーターを取り、"iterable" の内容をセパレーターで連結してた文字列を返します。

以下の例ではリストの中身を半角スペースで繋いで1つの文字列として
python is great” を Print out しています。

join_list = ["python", "is", "great"]

print(" ".join(join_list))

#python is great

演算子

”+ 演算子” はそのまま複数の文字列を繋げる役割を果たします。

例えばこんな感じで

a = "I "
b = "love "
c = "python!"

print(a + b + c)

#I love python!

例題

"I would like to eat sushi"
のように与えられた文字列の
"半角スペース"

"-"
を入れ替えて
"I-would-like-to-eat-sushi"
のような文字列を Print せよ。
ただし、replace() は使わずに。

上で扱った split() と join()で以下のようにしてみました。

解答例

def join_ex(givne_string):
    string_list = givne_string.split(' ')
    print('-'.join(string_list))
    return


join_ex('I would like to eat sushi')

#I-would-like-to-eat-sushi

解答例の解説

  1. 半角スペースで区切られた単語のリストをsplit()で作る。
  2. そしてjoin()で単語を"-"で連結。

任意文字または空白の削除:str.strip([chars])

読んで字の如く、文字列の外側(先頭&末尾)から引数 chars 値を剥ぎ取ったコピーを返します。引数 chars は除去される文字集合を指定する文字列です。
この剥ぎ取りは引数 chars の文字集合に含まれない文字に辿り着くまで続きます。何も指定しない場合は、外側から空白を剥ぎ取ります。

早速例題をみてみましょう。

例題

与えられた "ugly_list" から余計な"スペース"、"コンマ" 、"ピリオド"を取り除いた "clean_list" を Print せよ。

解答例

ugly_list = ['.   python.   ', '   .  javascript .    ', '...  .. swift,,,,']

clean_list = map(lambda x: x.strip(' ,.'), ugly_list)
print(list(clean_list))

解答例の解説

文字通り ugly_list からstrip()で余計な文字を先頭と末尾の両端から剥ぎ取る。

その他あれこれ

以前、文字列の大文字、小文字を操る capitalize() や、upper()lower()についても触れたので
よろしければそちらもご参照ください!
atsashimipy.hatenablog.com

参考リンク

docs.python.org
estorypost.com

以上、駆け足ですが Python での文字列操作をまとめさせていただきました!
これでまた、文字列操作を問われてもNo Google で即答できるのではないかと思います!多分笑

それでは皆様の良き Python Life を祈っております!!
また次回!
ありがとうございましたー!

【Flask超入門】その1:Flask で Hello World!! のための基本操作

f:id:At_sashimi_py:20191014055351p:plain

palletsprojects.com

この記事は【Flask超入門】その0 の続きとなります!
atsashimipy.hatenablog.com


では早速、前回作った仮想環境python fileを作成し、軽量Webフレームワークと名高い Flask でサクッと Hello World!!”していきましょう!

#terminal
$ touch flask_project.py

基本初期設定

公式に従って(ちょっと変更しました笑)

#flask_project.py

from flask import Flask

app = Flask(__name__)


@app.route('/')
def hello():
    return "<h1>Hello World!!</h1>"


Environment Variable を設定してローカルサーバーでRunできるようにします。

#terminal
$ export FLASK_APP=flask_project.py
#terminal
$ flask run

http://localhost:5000/

f:id:At_sashimi_py:20191013090528p:plain
Hello World!!

出来ました!(はや!!)

Hello World!!

ただこのままだとコードを変更した際、毎回サーバーを再起動しないと変更が適応されません。

それは、超絶面倒臭いので

#terminal
$ export FLASK_DEBUG=1

とすると
ページを更新するだけで変更が適用されるようになります。
試しに

#flask_project.py
from flask import Flask

app = Flask(__name__)


@app.route('/')
def hello():
    return "<h1>Hello Flask!!</h1>"


Hello World!! 

から

Hello Flask!!

に変更、そしてページ更新すると。。。

f:id:At_sashimi_py:20191013091429p:plain
Hello Flask!!

はい!更新されました!

Hello Flask!!

Environment Variableをターミナル閉じるごとに設定するのは面倒臭い。

面倒なことはなるべく排除していきましょう!
ということで
以下の

if __name__ == '__main__':
    app.run(debug=True)

を flask_project.pyの一番下に付け足しましょう。

#flask_project.py
from flask import Flask

app = Flask(__name__)


@app.route('/')
def hello():
    return "<h1>Hello Flask!!</h1>"


if __name__ == '__main__':
    app.run(debug=True)

そしていつものpythonを実行するように

#terminal
python flask_project.py

とすると
同じ画面が表示されます。
Environment Variable いちいち設定する必要がなくてこっちの方が断然楽ですね!

About ページ

以下を付け足して新しいページ(About page)を作りましょう

@app.route('/about')
def about():
    return "<h1>About Page</h1>"

http://localhost:5000/about

f:id:At_sashimi_py:20191013093122p:plain
About page

できました
@app.route('/') の真下に
@app.route('/home')
を加え、function名をhomeに

#flask_project.py
from flask import Flask

app = Flask(__name__)


@app.route('/')
@app.route('/home')
def home():
    return "<h1>Hello Flask!!</h1>"


@app.route('/about')
def about():
    return "<h1>About Page</h1>"


if __name__ == '__main__':
    app.run(debug=True)

こうすることで
http://localhost:5000/home
でも
http://localhost:5000
でもメインのページに帰ってくることができるようになりました。

今回はとりあえずここまで!


次回はもっとhtmlを書いて、それっぽい形にしていきましょう!
では!

【Flask超入門】その0:Conda で仮想環境構築+自動起動

こんにちは!
絶賛転職活動中!脳筋ニシキです!

先日ご縁があって、とあるディベロッパー採用マネージャーの方と話す機会を頂いたのですが、その方の口からやたらと

『Flaskを使って〇〇』
『うちではFlaskが〜〜』

とFlask推しと取れる発言が多く、今までDjagoしか触ったことのない僕としては、
『こいつはちょっとはFlask触れといたほうがいいな』
と強く感じ、週末を使ってFlaskで少し遊んでみることにしました。

仮想環境を作る

f:id:At_sashimi_py:20191013060248p:plain
今日ここで触れるのはFlaskではなく、仮想環境になります。
(Flaskについてはまた後日!)

仮想環境のメリット

個々のプロジェクトごとに使用されるライブラリ(特定のバージョン)のみインストールされている綺麗で無駄のない環境を用意できる上に管理しやすい

という点だと僕は認識しています。

なので今回はFlaskで遊ぶための仮想環境を作っていきます。

conda環境というアプローチ

仮想環境については色々なアプローチがあると思いますが、
僕が個人的にオススメのAnacondaを使った方法をご紹介したいと思います。

conda.io

環境

MacBook Pro (macOS Mojave)
python=3.7.4
conda=4.7.5

対象者

  • インストールはしたものの Anaconda 初心者
  • conda で複数のプロジェクトをスマートに管理したい
  • そもそも仮想環境って何?

とういう方々に向けて書き記していきたいと思います。

まずはプロジェクトのディレクトリを作成

mkdir {ディレクトリ名}

今回はFlaskで遊ぶというシナリオなので
ディレクトリ名は”flask_project”とします。

$ mkdir flask_project

ディレクトリ内に移動し

$ cd flask_project/

ディレクトリ内に仮想環境構築

conda create --name {任意の仮想環境名} {任意ライブラリ等}

以下の condaコマンドで仮想環境を作ります。
その際必要なライブラリ等も同時にインストールします。

$ conda create --name flask_project_env flask sqlalchemy numpy pandas

実行しますか?と聞かれるので、問題がなければ "y" を選択。

$ Proceed ([y]/n)? y

準備が整うと以下のような Activate と Deactivate のメッセージが出てくると思うので

#
# To activate this environment, use:
# > conda activate flask_project_env
#
# To deactivate an active environment, use:
# > conda deactivate
#

早速起動 (Activate) してみましょう!

仮想環境起動!

conda activate {仮想環境名}

$ conda activate flask_project_env

以下のようなエラーメッセージが出た場合

CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'.
To initialize your shell, run

    $ conda init <SHELL_NAME>

Currently supported shells are:
  - bash
  - fish
  - tcsh
  - xonsh
  - zsh
  - powershell

See 'conda init --help' for more information and options.

IMPORTANT: You may need to close and restart your shell after running 'conda init'.

説明に沿って

$ conda init bash

と入力し、ターミナルを再起動。

すると

(flask_project_env)

出来ました!

pip list でインストールされてるライブラリーを確認してみると

$ pip list
Package         Version  
--------------- ---------
certifi         2019.9.11
Click           7.0      
Flask           1.1.1    
itsdangerous    1.1.0    
Jinja2          2.10.3   
MarkupSafe      1.1.1    
mkl-fft         1.0.14   
mkl-random      1.1.0    
mkl-service     2.3.0    
numpy           1.17.2   
pandas          0.25.1   
pip             19.2.3   
python-dateutil 2.8.0    
pytz            2019.3   
setuptools      41.4.0   
six             1.12.0   
SQLAlchemy      1.3.9    
Werkzeug        0.16.0   
wheel           0.33.6   

上で指定したライブラリーとそれらに付随したライブラリーが表示されていると思います。

仮想環境の内容をYAMLファイルに出力して保存

仮想環境が整ったら、以下のコマンドで ”environment.yaml” を生成しておきます。

conda env export > {任意のファイル名}.yaml

$ conda env export > environment.yaml

中身は以下のようになります。

$ cat environment.yaml 
name: flask_project_env
channels:
  - defaults
dependencies:
  - blas=1.0=mkl
  - ca-certificates=2019.8.28=0
  - certifi=2019.9.11=py37_0
  - click=7.0=py37_0
  - flask=1.1.1=py_0
  - intel-openmp=2019.4=233
  - itsdangerous=1.1.0=py37_0
  - jinja2=2.10.3=py_0
  - libcxx=4.0.1=hcfea43d_1
  - libcxxabi=4.0.1=hcfea43d_1
  - libedit=3.1.20181209=hb402a30_0
  - libffi=3.2.1=h475c297_4
  - libgfortran=3.0.1=h93005f0_2
  - markupsafe=1.1.1=py37h1de35cc_0
  - mkl=2019.4=233
  - mkl-service=2.3.0=py37hfbe908c_0
  - mkl_fft=1.0.14=py37h5e564d8_0
  - mkl_random=1.1.0=py37ha771720_0
  - ncurses=6.1=h0a44026_1
  - numpy=1.17.2=py37h99e6662_0
  - numpy-base=1.17.2=py37h6575580_0
  - openssl=1.1.1d=h1de35cc_2
  - pandas=0.25.1=py37h0a44026_0
  - pip=19.2.3=py37_0
  - python=3.7.4=h359304d_1
  - python-dateutil=2.8.0=py37_0
  - pytz=2019.3=py_0
  - readline=7.0=h1de35cc_5
  - setuptools=41.4.0=py37_0
  - six=1.12.0=py37_0
  - sqlalchemy=1.3.9=py37h1de35cc_0
  - sqlite=3.30.0=ha441bb4_0
  - tk=8.6.8=ha441bb4_0
  - werkzeug=0.16.0=py_0
  - wheel=0.33.6=py37_0
  - xz=5.2.4=h1de35cc_4
  - zlib=1.2.11=h1de35cc_3
prefix: /anaconda3/envs/flask_project_env

こうすることで同じ仮想環境が次のコマンドで再構築することが可能に。

$ conda create -f envirornment.yaml

【おまけ】

超便利!自動仮想環境起動スクリプト

github.com

こちらを参考にさせていただきました。ありがとうございます。

$ nano ~/.bash_profile

で以下をbash_profileに付け足すと

# Auto activate conda environments
function conda_auto_env() {
  if [ -e "environment.yaml" ]; then
    ENV_NAME=$(head -n 1 environment.yaml | cut -f2 -d ' ')
    # Check if you are already in the environment
    if [[ $CONDA_PREFIX != *$ENV_NAME* ]]; then
      # Try to activate environment
      source activate $ENV_NAME &>/dev/null
    fi
  fi
}

export PROMPT_COMMAND="conda_auto_env;$PROMPT_COMMAND"

これで、"environment.yaml" が存在するディレクトリに移動すると自動で仮想環境を起動してくれます。これホント便利!

駆け足でしたが、これでCondaを使った仮想環境の準備が整いました!
次回から早速今回構築した仮想環境を使って Flask で遊んでいきます!

【Flask超入門】その1
atsashimipy.hatenablog.com

ありがとうございました!

【筋トレ初心者必見】筋トレが嫌でも習慣化する脳筋思考のススメ【人生が楽しくなる】

こんにちは!
筋肉ドリブン 脳筋ニシキです。
f:id:At_sashimi_py:20191002075348p:plain


普段はPythonやらJavaScriptでコードを書いたりして暮らしていて、ブログも大体そちら方面なのですが、最近のプログラマー界隈でのフィットネスブームに便乗して、大好きな筋トレについて書いてみようかと。


かく言う僕は自他共に認める脳筋で、どんなに忙しくとも毎日ジムで鍛えないといけない呪いを掛けられたかのような日々を送っております。

逆に

世の中の筋トレを習慣化したいという方には、この脳筋の思考がもしかしたら役に立つこともあるかもしれないのでここに記します。

対象読者

  • 筋トレ初心者
  • 筋トレを習慣化したい
  • 脳筋の行動/生態を理解したい

脳筋思考は一般的な思考法からは酷く逸脱しているので頑張って付いてきてください。

では参ります。

まず脳筋の主な特徴として次の3つがあります。

その①:脳筋は筋肉ドリブン、故にハッピー

その②:脳筋は筋肉の成長が最高の喜び

その③:脳筋脳筋を呼ぶ

順番にみていきましょう。

その①:脳筋は筋肉ドリブン、故にハッピー

おそらくみなさん周りにも一人か二人いるのではないでしょうか?
いつも明るく熱いやつが。

脳筋はどんなに小さいことでも筋肉が鍛えられていると感じると同時に幸せを感じます。

つまり、人間生きている限り常に何かしらの筋肉を使っている訳なので、そこに意識を向けるだけで、
『お、今ここの筋肉鍛えられてる!ラッキー!』
『あ、ここの筋肉にも効いてる!やったー!』
となる訳です。

例えば、普段何気なく歯を磨いてる時

脳筋上腕二頭筋を意識しながら磨いています。笑
もちろんバランスが悪くならないよう左右の腕を満遍なく使います。

f:id:At_sashimi_py:20191003155033p:plain
あの反復運動が上腕二頭筋を刺激する

デメリットすらメリットに変える脳筋思考

筋肉を鍛えていることが周囲に認知されてきたり、筋肉キャラが定着すると増えるのが、

『引っ越し手伝ってくれない?お礼に焼肉おごるから!』

などの重労働の依頼。

これを1つのデメリットとして捉える方もいるかもしれませんが、
真の脳筋は違います。

引っ越しの手伝い…そして、そのあとに焼肉

脳筋変換〜

引っ越しの手伝い → 重いものの上げ下げ+有酸素運動
引っ越し後の焼肉 → トレーニング後のプロテイン

『もちろん、行きます!むしろ、ありがとうございます!』

【補足】これに加え、筋肉を頼られたり褒められたりすると基本喜びます。適度に褒めてあげましょう。

その②:脳筋は筋肉の成長が最高の喜び

脳筋は筋肉の成長に敏感です。
見た目、パフォーマンスの質の変動に一喜一憂する生き物です。

努力が目に見えて実を結ぶ経験自信に繋がり、さらに高みを目指す糧となります。

だから続く!

脳筋は筋肉が鍛えた分だけ応えてくれると信じています。

そう!

『筋肉は裏切らない!!』

だからこそ

『そんな筋肉を裏切ることなどできるだろうか、いや出来ない!!』

故に

辞めるという選択肢は、自然となくなります。


f:id:At_sashimi_py:20191003155207p:plain
筋肉を裏切りたくない

その③:脳筋脳筋を呼ぶ

『類は友を呼ぶ』

と言いますが、まさにそれです。

筋肉という外見から判断しやすいという特性も相まって、脳筋は同類の匂いを嗅ぎ分けます。

ジムに限らず、職場や学校であっても、初対面で筋肉を無意識にチェックし、どの程度ストイックに筋肉にコミットしているのか、予想し判断しています。

なので近い思考の、筋トレ仲間が自然と増えていきます

こうして増ていく脳筋の繋がりがまたモチベーションとなり、あなたを挫折からまた1つ遠ざけてくれる要因となるでしょう。


脳筋のデメリット

ここまで駆け足で脳筋生態を3つ紹介してきましたが、最後に注意点にも触れておきたいと思います。

それは

プライベートやソーシャルライフを犠牲にしがち

あまりにも筋トレを優先するあまり、周りの大切な人たちとの時間を犠牲にしてしまいがちなので注意が必要です。

大切なことは、筋肉は一人で育てているのではないという事を自覚する事。

『周りの理解や支えがあってこその筋肉だと』

f:id:At_sashimi_py:20191004094549p:plain
つまり感謝の気持ちを忘れないヤツが一番強い


それでは、

そんな感謝の気持ちを持ちつつ、

今日も筋トレ行ってきます!

ありがとうございましたー!