Pythonがなんか動くようにする

<h1>Python は公式サイトからインストーラーをインストールすれば、とりあえず動く</h1>

ChatGPTなどの流行で書店に行くと、プログラミングのコーナーにはPython（実際の蛇は和名：ニシキヘビ）の本がたくさんありますが、Pythonの本を手に取ると
<h3>Anaconda（実際の蛇は和名：アナコンダ）という開発環境を入れろ</h3>

という内容が書いてあることが多いです。しかし実際は、
<h3>Python自体は以下の公式サイトからインストーラーさえ入れれば、とりあえず動かすことができます。</h3>

**なんなら、コードはメモ帳に保存して、動作させるときはPCにデフォルトで入っているコマンドプロンプト（Windows）またはターミナル（Mac）（※注）で動かすみたいなことができます。（＝必ずしもAnacondaの設定をする必要はない）** 変温動物である実際の蛇より、かなりタフです。

※注　ここでの「ターミナル」は例えばVisual Studio Code（通称VScode、以下VScodeと略）やeclipse （JavaのIDE（統合開発環境））のターミナルとは異なり、あくまで１つのデスクトップアプリです

こんなやつ👉　https://support.apple.com/ja-jp/guide/terminal/trmld4c92d55/mac

____

<h2>Pythonを勉強し始めたときに（といっても今現在で勉強を初めてから約半年ですが）、個人的にはVScodeに統一できたら楽だなと思い、現状今のところは Anaconda は全く使わず Vscode でゴリ押しできているので、その方法を以下記述します。</h2>

なお、自分が先日内定をいただき、この２月から働かせていただいてもらっている会社ではセキリティの関係上、
<h3>会社PC に VScodeは入っておらず、おそらくVScode(＋Pythonの上記のインストーラー)をインストールすることは会社ＰＣは管理職や上司の許可が最低でも必要な雰囲気を感じています（※他の方のQiitaを眺めていると、他の会社も同様の事例があると思われます）</h3>

そのため、以下の方法はあくまで、まずは私用PC で始める話であることを留意してください。

※以下、説明のための画像に挿入した画像に映り込んでいるネコは「ネッコサーフィン」というChromeの「何も害はなさないけど、ただ動き回るネコに画面を邪魔される」という謎拡張機能によるものなので無視してください。本Qiitaとは１％も関係ありません。
____
<h2>ステップ１：とりあえず Python が動かせるようにする</h2>

<h3>①とりあえず Python の公式サイトからインスーラーをダウンロードする</h3>

https://www.python.org/

**Windowsの場合**

<details><summary>折りたたみ画像の番号順にクリック</summary>

![installer_for_windows.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584834/572f73b1-35ec-eb93-b009-91bde3be89f1.png)
</details>

**Macの場合**

<details><summary>折りたたみ画像の番号順にクリック</summary>

![installer_for_Mac1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584834/f68e3a07-dbb0-5d3d-ec1c-4fa4d483fff8.png)

②を押すと、以下のページに跳びます。

![installer_for_Mac2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584834/749fc6bf-60fd-2d29-9758-fdb7b1e487da.png)

このページをスクロールして下を見ると、以下のようにMac用のインストーラーがあります。

![installer_for_Mac3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584834/30cb57d3-5214-3014-ff2a-5bbaabd63219.png)
</details>

____
<h3>② インストーラーを起動して、なされるがままにファイルをダウンロードする</h3>

![download_file.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584834/c048f10b-da58-eeeb-d68a-b1d9c4298437.png)

※上がWindows、下がMacのインストーラーです

____

<h4>インスーラー起動後</h4>

<details><summary>Windowsの場合</summary>

![installer1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584834/18889d88-98de-e145-6927-2dd645f49a08.png)

**※先に①のチェックをすることに注意**

なお、②のinstall nowをした時点で「ユーザーアカウント制御」のアラートダイアログが表示されたら「はい（Yes）」をクリック

「Setup was successful」のようなメッセージが表示されたら、「Close」を押す。
</details>

<details><summary>Macの場合</summary>

※現在私はMacのPC はもっていないので、詳しくは本Qiita末尾の主な参考資料①を参照してください。

①上記画像の.pkgファイルを開く。
　　　　　　　▽
②説明を確認しながら「続ける」を押し進める
　　　　　　　▽
③ソフトウェア使用許諾の同意画面も確認して「同意する」
　　　　　　　▽
④Pythonを動かすためのプログラムファイルのインストール先のディスク容量に十分な空きがあれば「インストール」をクリックして進める
　　　　　　　▽
⑤管理者パスワードを要求された場合は、Mac起動時のログインパスワードを入力
　　　　　　　▽
⑥インストールが完了しました、と書かれたウィンドウが出てくるのを確認したら
閉じる
</details>

_____

<h3>③きちんとインストールされたか確認する</h3>

<h4>方法１（PCに入っているアプリを確認する。※Macの場合Finderから起動するものと思われます）</h4>

<details><summary>details</summary>

画像の赤丸順に追っていってください。

![install_check1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584834/2865619c-3574-9331-c13a-785fa3bebe6e.png)

![install_check2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584834/569ea398-bfcd-bf81-aba6-fd60ebaca181.png)

![install_check.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584834/1f8c9f8c-56e5-924e-6c7a-d26b02fd1ff5.png)

![instrallered.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584834/252ede5e-5e70-a630-fb2d-e19410ca25d9.png)

</details>

<h4>方法その２（Windowsならコマンドプロンプト、Macならターミナル（※上記の通りVScode等のIDEのターミナルとは別物です）といったデフォルトの開発者用アプリを利用）</h4>

<details><summary>details</summary>

コマンドプロンプトないしターミナルに以下を入力してEnter
※cdコマンドで特に所定のファイルに移動する必要はないです。
```powershell
#pythonのバージョン名のみを確認する
python --version

#pythonのバージョンとどこにプログラムのためのファイルが諸々入っているかを表示する
python -v
```

コマンドプロンプトの様子（※２行目のPythonの数字はおそらくバージョンが更新されているので異なります）

![command_prompt.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584834/bb4dfa1d-a42d-a3a5-26dc-d9a5db85771b.png)

なお、諸々のファイルはデフォルトであれば、Windowsの場合はおそらく
「C:\Users\各ユーザー名\AppData\Local\Programs\Python\」みたいな感じで入っています。

![python_files.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584834/9b99c7be-e3df-8a80-8ecc-9313de289ccd.png)

![instrallered.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584834/cee6d8ad-9d32-4fb1-8d5a-7cd9ee3c2c87.png)
</details>

<h4>方法その３（「VScodeの」ターミナルを利用）</h4>

<details><summary>details</summary>

方法２と同様に以下をVScodeのターミナルに入力してEnter
※Windowsであれば、powershell もしくは cmd（コマンドプロンプト）、Macならzsh等
```powershell
#pythonのバージョン名のみを確認する
python --version

#pythonのバージョンとどこにプログラムのためのファイルが諸々入っているかを表示する
python -v
```

![terminal.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584834/9111d5d6-f6ed-3f39-b781-60a181487f47.png)

※今回の場合、バージョン3.11.4 が入っています
</details>



____
※すでにインストールしていて新たに更新する場合

以下のような記事がありました。現在今自分は事足りているので更新していませんが同様に行えそうです。

「WindowsのPythonをバージョンアップする方法と注意点の解説（Anacondaを使わない場合）」
　https://1978works.com/2023/04/29/how-to-update-python-on-windows/

**※Macも同様と思われますが、できれば周りのMacユーザーに各位要確認をお願いします。**

____
<h2>ステップ２：VScode の 拡張機能やsetting や setting.jsonをいじる</h2>

一応、ステップ１の段階で例えば、ステップ４のところにQiitaにある対話モード（インタラクティブシェル：おそらくinteractive shell）という動かし方ができますが（これはこれで使い道はありますが・・）、

チーム開発をしたりする場合、Githubとか使うと思うので諸々自分はVScodeゴリ押し派で、それを一層やりやすくするために以下のような拡張機能等をVScodeに対して設定しています。（Anacondaも便利な方法があってそれを知らないだけかもですが・・・）

<h3>（１）VScode拡張機能「Python」のインストール</h3>

<details><summary>details</summary>

Pythonのプログラミングをサポートくれているらしい拡張機能
（※拡張機能：VScodeの左側にあるブロックを田んぼの田の右上だけ飛び出ているようなマークを押す⇒拡張機能の名前を検索⇒対象の拡張機能をインストールを押して設定）
（※時々有料やアカウント登録が他に設定が必要なものもありますが、大概無料で使えます。）

![python_extension.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584834/912761f9-7957-750d-4e53-e9d91682ae86.png)
</details>

<h3>（２）いちいちファイルを保存するのは面倒なので、ゲームのオートセーブみたいに VScode を閉じたら各ファイル（Pythonなら、「.pyファイル」が）オートセーブされるようにしておく</h3>

<details><summary>details</summary>

③がoffになっている場合、「afterDelay」にすると「オートセーブ」になります。

![afterdelay.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584834/cef94514-b147-e3b8-79dd-16ed53710ce9.png)
</details>

<h3>（３）Pythonは条件分岐とかで適宜インデントを入れないとエラーになるので、Error Lens、Prettier、indent-rainbowという以下の拡張機能を入れておいて、エラーリファレンスをしやすくする（※任意ですが、個人的には入れておくと便利です。）</h3>

<details><summary>details</summary>

<h4>① Error Lens（コード記述時点で何かミスってたら、赤色のメッセージかオレンジ色のアラートが出る）</h4>

![Error_Lens.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584834/8d727a13-a690-4d05-dd25-982c635821cb.png)

<h4>② Prettier（コードフォーマッタ：ファイルを上書き保存時に見た目が良い感じになるようにする）</h4>

![Prettier.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584834/dde3c6fb-45e9-d351-5088-2cc5d08684e9.png)

<h4>③ indent-rainbow（インデントをつける度にVScodeの背景をつける）</h4>

![indent_rainbow.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584834/644000d3-9e75-dae5-fe26-30d99427aacd.png)

![extensions_sample.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584834/a25f5142-79b0-fb67-e7c1-62d0e7225616.png)
</details>

<h3>（４）autopep8というコードフォーマッタを入れる（※同じく任意）</h3>

https://qiita.com/fehde/items/c25b67c95425b733fb7d

<h3>（５）setting.jsonを設定する（※同じく任意）</h3>

<details><summary>details</summary>

※setting.json：VScodeにおける拡張機能を自分でカスタマイズするようなjson形式のファイル。VScodeの場合、以下画像ページに設定します（各PCのsetting.jsonファイルに貼り付けると設定が適用されます）。なお、本来のVScodeの拡張機能でインストールした内容もおそらくですが、ここにどんどん記録されていきます。

![setting_json.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584834/bc3a63af-6940-9737-de64-9d2eb427889a.png)

![setting_json2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584834/9b2ff488-4bb0-556d-24c2-68732adc346a.png)



あくまで一例です。個人的には３番目の"editor.tokenColorCustomizations": {～}は、コード記述時のエラーリファレンスにかなり重宝しています
```json
{
  //オートセーブにする
  "files.autoSave": "afterDelay",

  //VScodeの基調色を画像のように白っぽい感じにする
  "workbench.colorTheme": "Brackets Light Pro",

  //各VScodeに記述したコードの色を種類分けしてそれぞれ文字色をrgbで再指定
  "editor.tokenColorCustomizations": {
    //コメント
    "comments": {
      "foreground": "#ff0000",
      "fontStyle": "bold"
    },
    //関数・メソッド
    "functions": {
      "foreground": "#0000ff",
      "fontStyle": "bold"
    },
    //キーワード
    "keywords": {
      "foreground": "#008080",
      "fontStyle": "bold"
    },
    //数値
    "numbers": {
      "foreground": "#800000",
      "fontStyle": "bold"
    },
    //文字列
    "strings": {
      "foreground": "#000",
      "fontStyle": "bold"
    },
    //型
    "types": {
      "foreground": "#008000",
      "fontStyle": "bold"
    },
    //変数
    "variables": {
      "foreground": "#ff00ff",
      "fontStyle": "bold"
    }
  },

  //code spell checkerで無視・許容した文字列たち  
  "cSpell.ignoreWords": ["Laravel", "resetsheet", "techis", "twitterblue"],
  "cSpell.userWords": [
    "addslashes",
    "aichi",
    "alreadyregistered",
    "appbody",
    "askdkc",
    "authuser",
    "autoincrement",
    "autopep",
    "barryvdh",
    "beautifulsoup",
    "borderwidth",
    "breezejp",
    "bringe",
    "btns",
    "Contactcontroller",
    "contactforms",
    "DATABASENAME",
    "dazu",
    "debugbar",
    "deletepost",
    "deleteposts",
    "designdocuments",
    "doesnt",
    "dont",
    "eachitem",
    "editeddata",
    "editmenu",
    "editorview",
    "editview",
    "encrypter",
    "esbenp",
    "filemenu",
    "fileopen",
    "fontawesome",
    "forgetpassword",
    "gakumonnosusume",
    "genspider",
    "getinfo",
    "githubcontactforms",
    "herokuapp",
    "hitsujitani",
    "homenavbar",
    "homenavcontents",
    "homepagelinks",
    "Homepagespider",
    "illumiinate",
    "indexview",
    "informations",
    "initialfile",
    "innerwrap",
    "inputvalue",
    "itemdestroy",
    "iteminfo",
    "Itempagelinks",
    "iudex",
    "Kitefin",
    "learncontents",
    "lieben",
    "loginpage",
    "meinen",
    "Miem",
    "mimetypes",
    "möchte",
    "Modalerase",
    "Modalshow",
    "Myname",
    "myskills",
    "navcontents",
    "NERV",
    "neta",
    "nongithub",
    "nowhour",
    "nowtime",
    "openai",
    "opinioncheckedindex",
    "opinionindex",
    "Oraga",
    "Ornotlogin",
    "Orqustion",
    "outerwrap",
    "outwrap",
    "padx",
    "pady",
    "pagelink",
    "pagelinks",
    "Paiza",
    "passwordbox",
    "Photoshop",
    "phpadmin",
    "postdestroy",
    "Pyhton",
    "pyocr",
    "qiita",
    "qrcode",
    "Renderable",
    "seiten",
    "Sekigahara",
    "Sekitama",
    "sekitamaposts",
    "selectbox",
    "sentense",
    "showeach",
    "showeachlink",
    "showscd",
    "smallinteger",
    "tailwindcss",
    "takekurabe",
    "techdefaultwelcome",
    "Tenki",
    "tesseract",
    "textvariable",
    "tokenable",
    "tsuke",
    "uncompromised",
    "updatedata",
    "updateddeleteflag",
    "updateddetail",
    "updatedid",
    "updatedinfo",
    "updatedname",
    "updatedtype",
    "updatedupdatedat",
    "updatedupdatedby",
    "updateitem",
    "validateduserinfo",
    "visitorname",
    "wissen",
    "witchwatch",
    "xampp",
    "yobi"
  ]
}

```
</details>

____

<h2>ステップ３：実装に必要なファイルをimportする（≒カスタマイズ）</h2>
これでだいぶ使いやすくなったと思いますが、まだやることがあります。それは
<h3>必要な外部ライブラリー（関数とか諸々の便利機能をまとめたPythonのファイルの寄せ集め）のインストール</h3>
です。（イメージとしては、ゲームとかおもちゃの欲しいパーツを子どもにせがまれてトイザらスとかに買いに行く感じ）

____

**※Pythonの各ファイル（拡張子は.py）をモジュールと言います。**

**※デフォルトで備わっている一定の機能をまとめた各ファイルを一般に標準モジュールといい、本来備わっておらず適宜実装したい機能に合わせて、CDN（Contents Delivery Network）のようにカスタマイズしていくやつを外部ライブラリーや外部モジュール等と言います。）**

※**標準に備わっているユーザー定義関数でない一般的な関数を組み込み関数と言います**が、それだけでも以下リンクを見てもらえば分かるように、ちょっと引くほど大量にあります（※超人出ない限り、全て覚えるのは無理です。自分のような一般よわよわはたぶん参照します）

〇デフォルトですでに入っている標準モジュール（標準ライブラリー）

https://docs.python.org/ja/3/library/index.html

<h3>〇こんな感じでカスタマイズしていくという例</h3>

<details><summary>details</summary>

外部モジュールをカスタマイズしていくときは、以下リンクのPyPIというサイトが便利です。基本これに載っているやつは、**カスタマイズしたい外部モジュールの「名前」さえ分かればpipコマンドというコマンドで、じゃんじゃんPCの容量が許す限り、VScode もしくはコマンドプロンプトか（Macの）ターミナル経由で簡単にインストールできます。（installしてからimportという作業をしていく**　※標準モジュールはpip によるinstallは不要）

https://pypi.org/

インストールのために、よく使うpipコマンドは例えば以下の通りです（VScodeのターミナル（powershellやcmd、zsh）を開いて、入力してEnter）
```powershell
#各外部ライブラリーやモジュールのinstall
pip install インストールしたいモジュール名（※拡張子はつけない）

#installした外部ライブラリー・外部モジュールの確認
pip list

#installしたそれぞれの外部ライブラリー・外部モジュールのバージョンを確認する
py -m pip list --outdated

#installしたそれぞれの外部ライブラリー・外部モジュールのうち、更新したいものを更新する
py -m pip install --upgrade 更新したいライブラリー・モジュール名
```

例えば、py -m pip list --outdatedを使うとこんな感じになります

![pip_command2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584834/24d12dc6-28d7-1aad-304f-c5029bd30701.png)

一方、pip listを使うとこんな感じ

![pip_command1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584834/c2df6e3f-c2d8-c588-6c61-c294faa552b9.png)

比べてみると分かりますが、pip listの方にはあるのに、py -m pip list --outdated の方にはないものがあることが分かります。（おそらくですが、そのようなものは最新が保たれている）

**※ただ、全てを必ずしも最新（latest）のバージョンに保つ必要はない**

__________

installした後は以下Qiitaのようにコードを書いていきます

〇BeautifulSoup（beautifulsoup4）公式ドキュメント日本語翻訳案

　https://qiita.com/thinking-weed/items/a468b3deccea13710359

**なお、installをするのにpoetryという便利らしいPythonのパッケージ管理システム（※上記の外部モジュール等を整理して取得する）** を利用する方法もありますが、自分はまだ理解できていないので、それは他のつよつよの方のQiitaを参照してください。

※また、例えば外部モジュール（外部ライブラリー）には次のようなものがあります。（この方のQiitaは個人的にかなり参照しています）

https://qiita.com/python_academia/items/62aefbf4e373cd2aa496

</details>

____

<h3>〇開発効率を上げるよわよわ方針</h3>

<details><summary>details</summary>

<h3>Pythonは、関数やメソッドという単位でも数が大量にあり、使用頻度にかなりバラツキがあるので、個人的には以下の流れが開発効率が良いのではないかと思います</h3>

①実装したい機能を考える
　　　　　　▽
②「機能　Python」とかで検索する
　　　　　　▽
③必要そうなモジュールをimport
　　　　　　▽
④必要そうな関数やメソッドやオブジェクトだけ調べる（※全ての関数やメソッドを使い切ることはまずない）
　　　　　　▽
⑤設計・リファクタリング（外部から見た時の挙動は変えずに、プログラムの内部構造を整理すること、要はコードを直すこと）
　　　　　　▽
      ①　～　④ に戻る

</details>

______

<h2>ステップ４：とりあえず、なんか動かしてみる</h2>
Pythonのファイルの起動の仕方は以下Qiitaのように複数あります

https://qiita.com/thinking-weed/items/40510d7bc6db12ee50db


<h2>主な参考資料</h2>

①確かな力が身につくPython「超」入門　鎌田 正浩 著　SB Creative社

<details><summary>Amazonリンク</summary>

https://www.amazon.co.jp/%E7%A2%BA%E3%81%8B%E3%81%AA%E5%8A%9B%E3%81%8C%E8%BA%AB%E3%81%AB%E3%81%A4%E3%81%8FPython%E3%80%8C%E8%B6%85%E3%80%8D%E5%85%A5%E9%96%80-%E7%AC%AC2%E7%89%88-%E7%A2%BA%E3%81%8B%E3%81%AA%E5%8A%9B%E3%81%8C%E8%BA%AB%E3%81%AB%E3%81%A4%E3%81%8F%E3%80%8C%E8%B6%85%E3%80%8D%E5%85%A5%E9%96%80-%E9%8E%8C%E7%94%B0-%E6%AD%A3%E6%B5%A9/dp/4815613729/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=13VURN8UJNSST&keywords=%E7%A2%BA%E3%81%8B%E3%81%AA%E5%8A%9B%E3%81%8C%E8%BA%AB%E3%81%AB%E3%81%A4%E3%81%8FPython%E3%80%8C%E8%B6%85%E3%80%8D%E5%85%A5%E9%96%80&qid=1707542701&sprefix=%E7%A2%BA%E3%81%8B%E3%81%AA%E5%8A%9B%E3%81%8C%E8%BA%AB%E3%81%AB%E3%81%A4%E3%81%8Fpython+%E8%B6%85+%E5%85%A5%E9%96%80%2Caps%2C230&sr=8-1
</details>


②最初からそう教えてくれればいいのに　PythonでExcelやメール操作を自動化するツボとコツがゼッタイにわかる本　立山 秀利　著　秀和システム

<details><summary>Amazonリンク</summary>

https://www.amazon.co.jp/Python%E3%81%A7Excel%E3%82%84%E3%83%A1%E3%83%BC%E3%83%AB%E6%93%8D%E4%BD%9C%E3%82%92%E8%87%AA%E5%8B%95%E5%8C%96%E3%81%99%E3%82%8B%E3%83%84%E3%83%9C%E3%81%A8%E3%82%B3%E3%83%84%E3%81%8C%E3%82%BC%E3%83%83%E3%82%BF%E3%82%A4%E3%81%AB%E3%82%8F%E3%81%8B%E3%82%8B%E6%9C%AC-%E7%AB%8B%E5%B1%B1%E7%A7%80%E5%88%A9/dp/4798067768/ref=sr_1_1?crid=34O8JDUKWEITO&keywords=python%E3%81%A7excel%E3%82%84%E3%83%A1%E3%83%BC%E3%83%AB%E6%93%8D%E4%BD%9C%E3%82%92%E8%87%AA%E5%8B%95%E5%8C%96%E7%82%BA%E3%82%8B%E5%A3%BA%E3%81%A8%E3%81%93%E3%81%A4%E3%81%8C%E7%B5%B6%E5%AF%BE%E3%81%AB%E5%88%86%E3%81%8B%E3%82%8B%E6%9C%AC&qid=1707542657&sprefix=Python%E3%81%A7Exce%2Caps%2C436&sr=8-1
</details>

③関数とメソッドの違いとは（Pythonでわかりやすく説明）
　https://gammasoft.jp/blog/difference-method-vs-function/

④以下Qiita

https://qiita.com/katsuki_ono/items/2dd1ff68dd4e740eb2ab