20201113のMacに関する記事は8件です。

Docker for Macに付属のKubernetesにmetrics-serverをHelmでインストールする

概要

タイトルのとおり Docker for Mac に付属の Kubernetes クラスタに metrics-server を Helm を使ってインストールする方法のメモです。

インストール方法

基本的には下記のコマンドを実行するだけです。

$ helm repo add bitnami https://charts.bitnami.com/bitnami
$ helm install metrics-server bitnami/metrics-server --namespace kube-system --set rbac.create=false --set apiService.create=true --set extraArgs.kubelet-insecure-tls=true

それぞれのコマンドは下記を実行しています。

  • helm に bitnami のリポジトリを追加(追加済みの場合は不要です)
  • metrics-server をインストール1

これで少し待つと kubectl top node 等でメトリクスが取得可能となります。

$ kubectl top node
NAME             CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%
docker-desktop   521m         8%     1363Mi          19%

  1. 地味に難しかったのがコマンド引数に --kubelet-insecure-tls を指定する方法です。metrics-serverには extraArgs が用意されているのですが、デフォルトが [] というのを見て extraArgs[0]=kubelet-insecure-tls のように指定すると --0=kubelet-insecure-tls に変換されてしまい動きません。 

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Macのdockのfinderでハイライト表示 するべ

スタックをハイライト表示

スタックの表示形式をグリッドにしたとき選択中の項目をハイライト

defaults write com.apple.dock mouse-over-hilite-stack -bool true

戻す

defaults delete com.apple.dock mouse-over-hilite-stack

スクリーンショット 2020-11-13 19.53.23.png

マークダウン読もうと思った

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

theharvesterインストールと簡単な使い方

theharvester って?

  • OSINT(open source intelligence)ツール
  • ドメイン名から内包するホストやメールアドレス、名前、サブドメイン、IP、URLなどを探してくれる。
    自ドメインのメールアドレスが、意図せず公開されていないか調べる時なんかに便利です。
  • KaliLinux だったら追加インストールする事なく利用出来ます。
  • 検索エンジンを使って調べるので、マイナーなドメインだと殆ど情報が得られない事もあります。
  • 沢山の情報ソースを利用できるけど、以下のうち太字のソースとSHODANを利用するにはAPIキーの登録が必要

baidu, bing, bingapi, certspotter, crtsh, dnsdumpster,
dogpile, duckduckgo, github-code, google, hunter,
intelx, linkedin, linkedin_links, netcraft, otx,
securityTrails, spyse(disabled for now), threatcrowd,
trello, twitter, vhost, virustotal, yahoo

インストール

今回はMacOS Catalina で利用するためにインストールから始めます。
楽をしたいので、brewを使ってインストールしちゃいます。

kichise@imac ~ % brew install theharvester

brew: command not found が出る場合、Homebrewがインストールされていないかも知れません。
先に Homebrewのインストール を行いましょう。

使い方

オプション一覧

kichise@imac ~ % theharvester -h                      
table results already exists

*******************************************************************
*  _   _                                            _             *
* | |_| |__   ___    /\  /\__ _ _ ____   _____  ___| |_ ___ _ __  *
* | __|  _ \ / _ \  / /_/ / _` | '__\ \ / / _ \/ __| __/ _ \ '__| *
* | |_| | | |  __/ / __  / (_| | |   \ V /  __/\__ \ ||  __/ |    *
*  \__|_| |_|\___| \/ /_/ \__,_|_|    \_/ \___||___/\__\___|_|    *
*                                                                 *
* theHarvester 3.1.0                                         *
* Coded by Christian Martorella                                   *
* Edge-Security Research                                          *
* cmartorella@edge-security.com                                   *
*                                                                 *
******************************************************************* 


usage: theHarvester.py [-h] -d DOMAIN [-l LIMIT] [-S START] [-g] [-p] [-s]
                       [-v] [-e DNS_SERVER] [-t DNS_TLD] [-n] [-c]
                       [-f FILENAME] [-b SOURCE]

theHarvester is used to gather open source intelligence (OSINT) on a company
or domain.

optional arguments:
  -h, --help            show this help message and exit
  -d DOMAIN, --domain DOMAIN
                        company name or domain to search
  -l LIMIT, --limit LIMIT
                        limit the number of search results, default=500
  -S START, --start START
                        start with result number X, default=0
  -g, --google-dork     use Google Dorks for Google search
  -p, --port-scan       scan the detected hosts and check for Takeovers
                        (21,22,80,443,8080)
  -s, --shodan          use Shodan to query discovered hosts
  -v, --virtual-host    verify host name via DNS resolution and search for
                        virtual hosts
  -e DNS_SERVER, --dns-server DNS_SERVER
                        DNS server to use for lookup
  -t DNS_TLD, --dns-tld DNS_TLD
                        perform a DNS TLD expansion discovery, default False
  -n, --dns-lookup      enable DNS server lookup, default False
  -c, --dns-brute       perform a DNS brute force on the domain
  -f FILENAME, --filename FILENAME
                        save the results to an HTML and/or XML file
  -b SOURCE, --source SOURCE
                        baidu, bing, bingapi, certspotter, crtsh, dnsdumpster,
                        dogpile, duckduckgo, github-code, google, hunter,
                        intelx, linkedin, linkedin_links, netcraft, otx,
                        securityTrails, spyse(disabled for now), threatcrowd,
                        trello, twitter, vhost, virustotal, yahoo, all
kichise@imac ~ % 

使用例

apple.com について、googleで調べる場合はこんな感じ

kichise@imac ~ % theharvester -d apple.com -b google

ちなみに、テストした時は
googleは Hosts foound: 8 だったのに対して Yahooは Hosts found:155 でした。
実際に調べる時は、いろいろなソースを指定して検索してみるのが良さそうです。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

キーチェーンとそのコマンドたち

きっかけ

最近キーチェーンを調べなければならないシーンがあったのですが、circleCI上での話だったのでCUIしか使えず。。。
GUIでしかキーチェーンの操作したことがなかった僕はとても困ったので記事にしました。

キーチェーン概要

赤い枠の部分がキーチェーンたちで、「ログイン」が1個のキーチェーンになってます。
そして青い枠で、選択されているキーチェーン内にある項目の何を表示するかの絞り込みを行ってます。

システムが認識できるキーチェインは2つで、
システムのキーチェインが1つとユーザーのキーチェインが1つのみになります。たぶん。。

キーチェイン作成

security create-keychain {{キーチェーンパス}}

キーチェイン一覧

security list-keychains

システム側とユーザー側とで設定されているキーチェイン2つを表示します。
-d u オプションでユーザーのキーチェーンが確認できます。

読み込むキーチェインを追加します。

security list-keychains -s {{キーチェーンパス}}

キーチェインに証明書を追加します。

security import {{証明書パス}} -k {{キーチェーンパス}} -P {{password}} -T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild

-Tオプションで、パスワードなしで許可するアプリを設定します。複数指定可能です。

キーチェインの設定を行います。

security set-keychain-settings -t 3600 -l {{キーチェーンパス}}

-lオプションは、スリープした時にキーチェーンをロックします。
-t 3600オプションは、3600秒後にキーチェーンをロックします。

実際にやってみよう!

キーチェーン一覧

まずはキーチェーン一覧を見てみます。
/Users/maruiyugo/Library/Keychains/login.keychain-dbが画像の「ログイン」というキーチェーンです。
/Library/Keychains/System.keychainが「システム」キーチェーンですね。

$ security list-keychains
    "/Users/maruiyugo/Library/Keychains/login.keychain-db"
    "/Library/Keychains/System.keychain"

キーチェーン作成と設定

marui.keychain-dbキーチェーンを作成し、キーチェーンの読み込みを行いました。
最後にキーチェーンのリストを表示させています。
するとlogin.keychain-dbmarui.keychain-dbに入れ替わったではありませんか!
キーチェーンアクセスをみても「ログイン」が「marui」になっています。

$ security create-keychain ~/Library/Keychains/marui.keychain-db
    password for new keychain:
    retype password for new keychain:
$ security list-keychains -s ~/Library/Keychains/marui.keychain-db
$ security list-keychains
    "/Users/maruiyugo/Library/Keychains/marui.keychain-db"
    "/Library/Keychains/System.keychain"

パスワードの保存などはまだしていないため中身は空っぽです。

キーチェインに証明書を追加

適当なp12ファイルを追加してみました。

$ security import {{p12}} -k ~/Library/Keychains/marui.keychain-db -P {{password}} -T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild

一覧にp12ファイルが表示されました。

キーの中身を見てみると、オプションで指定した「codesign」「security」「productbuild」が許可されています。

まとめ

キーチェーンは今まで流されるままに使っていたので、今回調べて詳しくなれてよかったです。
記事がよかった!とかためになった!とか思ったら、励みになるのでLGTMおしてください!ないてよろこびます(๑>◡<๑)

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[mac]スクリーンショットを超快適にしよう

Macでスクリーンショットを利用する際のtipsをシェアします。

スクリーンショットする際のショートカットキー

Command + Shift + 3
画面全体をキャプチャ。

Command + Shit + 4
マウスで選択した範囲のみキャプチャ。
マウスカーソルの形状が変わるのでキャプチャしたい範囲をドラッグで決める。
ESCでキャンセル。

保存せず、そのままクリップボードにコピーしたい場合

これ超便利!知らない人は人生半分損してる。。。
ドキュメント貼り付け作業が捗ります。

Command + Shift + Control + 3
画面全体

Command + Shit + Control + 4
マウス選択の範囲。

上記のショートカットキー+Controlキーを押すだけ。

保存場所を変更

デフォルトではデスクトップに保存されますが、任意のディレクトリに移動できます。
デスクトップにスクショ溜まるのうざいので、これは良い!
コマンドラインから設定し、再起動すれば反映されます。

↓今回は ~/Downloads/ に設定していますが、別のディレクトリも指定可能。

terminal
$ defaults write com.apple.screencapture location ~/Downloads/ 
↓デフォルトに戻す場合はこちら。設定値を削除するイメージです。
$ defaults delete com.apple.screencapture location

↓やっぱりデフォルトに戻したい場合。

terminal
$ defaults delete com.apple.screencapture location

保存形式を変更

デフォルトではpngで保存されます。
複数のファイル形式を指定できます。
用途に応じて保存時に形式変更できるので最高!
こちらもコマンドラインから設定し、再起動すれば反映されます。

↓今回はjpgで保存する場合のコマンド。

terminal
defaults write com.apple.screencapture type jpg;

まとめ

これであなたのスクリーンショットライフは超快適になること間違いなしですね!

参考

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Macで三ヶ国語以上の入力を一発で切り替える方法 英語 / 日本語 / 韓国語

はじめに

友達が、韓国語のキーボードのMacで三ヶ国語の切り替えをキー1つずつで管理できたら良いなと言ってて、その子のパソコンをいじってたら設定できたので忘れないうちに書いておきます。

環境

友達のパソコンから書いてるので前の記事と環境が異なります。
MacBook Air (2019), Catalina 10.15.7
Visual Studio Code, 1.51.1

問題点

Macの韓国語のキーボードはUS配列と同じなので、JIS配列と違ってスペースキーの左右にかな/英数のキーがありません。なので英数とかな、ハングルとかな、ハングルと英数などの二種類の切り替えはcaps lockのon offで管理できました。しかし3つ以上となるとmacのデフォルトの環境ではcontrol + option + spaceかcontrol + spaceで、かな→英数→ハングル→かな...のように順番に変えることしかできないのでめんどくさい。これをキー1つずつで管理しようと思った。

まずは言語の設定

システム環境設定→キーボードから韓国語を追加。ちなみにひらがなだけGoogle日本語入力使ってます(特に理由はない)。
スクリーンショット 2020-11-13 5.56.35.png

かなと英数をKarabinerを使ってスペースキーの左右のコマンドで切り替えれるようにする

  1. Karabinerをダウンロードし、開く。
  2. 下図のAdd ruleをクリック。 スクリーンショット 2020-11-13 6.22.08.png
  3. 画像の上の方にImport more rules from the Internet (open a web browser)をクリック。 スクリーンショット 2020-11-13 6.25.21.png
  4. ブラウザが起動したらInternational (Language Specific)で検索しクリック。 スクリーンショット 2020-11-13 6.28.48.png
  5. For Japanese (日本語環境向けの設定) (rev 5)をImportする。 スクリーンショット 2020-11-13 6.30.40.png
  6. インポートを終えるとコマンドキーを単体で押したときに、英数・かなキーを送信する。(左コマンドキーは英数、右コマンドキーはかな)の右に書かれているEnableをクリック。 スクリーンショット 2020-11-13 6.33.24.png この手順でかなと英数はコマンドキーで管理できるようになった。

左のoptionキーでハングルに切り替えるようにする

  1. KarabinerでMisk→Open config folder (~/.config/karabiner)までクリックしていくと、Finderが開きkarabinerのファイルが表示される。
  2. Finderに表示されているkarabinerからkarabiner→assets→complex_modificationsまで行くとjsonファイルが1つ確認できる。
  3. 次にVisual Studio Codeを開きjsonファイルを作る。名前は適当にhogehoge.jsonとする。
  4. hogehoge.jsonに下の内容を貼り付ける。
hogehoge.json
{
  "title": "独自ルール設定 v1",
  "rules": [
    {
      "description": "左optionキーを押すと韓国語入力に切り替わる",
      "manipulators": [
        {
            "type": "basic",
            "from": {
                "key_code": "left_option",
                "modifiers": {
                    "optional": [
                        "any"
                    ]
                }
            },
            "parameters": {
                "basic.to_if_held_down_threshold_milliseconds": 100
            },
            "to": [
                {
                    "key_code": "left_option",
                    "lazy": true
                }
            ],
            "to_if_held_down": [
                {
                    "key_code": "left_option"
                }
            ],
            "to_if_alone": [
                {
                    "select_input_source": {
                        "language": "ko"
                    }
                }
            ]
        }
      ]
    }
  ]
}

5.これを2で確認したjsonファイルと同じところに保存する。
6. KarabinerでAdd ruleから独自ルール設定 v1Enableする。
スクリーンショット 2020-11-13 6.54.06.png
以上で、左のoptionキーでハングルに切り替わる。

最後に

最近は周りに韓国語話せる人も増えてきたと感じていたが、キーボードもハングルの人ははじめて見た。ちなみにjsonそんなに詳しくありません。色々調べてみたらできたって感じです。

おまけ

今回は3言語目を韓国語でoptionキーに設定しましたが、他の言語にも設定できます。↑に載せたjson
ファイルの一番最後の行の"language": "ko"の"ko"は韓国語を示すios端末の言語環境の値っぽいのでこの参考記事を見たらできると思います。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

MacでAndroidをビルドする際に参考にしたサイト

macでunityをビルドしてAndroid実機でテストする方法
https://note.com/pes88/n/n2141cffd2f8f

UnityでAndroidにビルドする(Mac)
https://sh-lu0.hatenablog.com/entry/2018/12/09/Unity%E3%81%A7Android%E3%81%AB%E3%83%93%E3%83%AB%E3%83%89%E3%81%99%E3%82%8B%28Mac%29

Unity2018インストールからAndroidビルドするまでの手順
https://qiita.com/taroyan/items/2ff7f6aadd640221bde5
※このサイトが一番参考になった

Android Studioは結局使ってない。どこかで使うシーンが出てくるんだろうが、テスト用にAndroidのスマホにビルドしたアプリを入れるだけなら必要なかったので、案外楽チンだった

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

俺の環境構築 pipenvとpyenvでの仮想環境構築からJupyter Notebookを使うまで

はじめに

よくmacでの環境構築方法を忘れてしまうので,メモ程度で書いておきます.流れとしては新品もしくは初期化状態からの説明を書いていくつもりです.

環境

MacBook Pro (2020), Catalina 10.15.7

Homebrewとは

macOS上でパッケージの管理をするシステムのこと.環境構築をする時や,パッケージのインストールなどに使う.

Xcodeのインストール

まずHomebrewをインストールする際に必要なXcodeからインストールします.以下のコードをTerminalで実行するだけでインストールされます.

$ xcode-select --install

たまに原因不明(おそらくmacOSとXcodeのヴァージョンの不一致)で上手くXcodeをインストールできない時があり,下記のようになるが,,,

$ xcode-select --install
xcode-select: note: install requested for command line developer tools

この場合は↓の記事で解決方法を書いたのでそれを参照してください.
Xcodeをインストールできなかった時の対策

Homebrewのインストール

以下のコードをTerminalで実行する.

$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

Homebrewのパッケージのインストール

$ brew install pyenv      # pyenvパッケージのインストール   
$ brew install pipenv     # pipenvパッケージのインストール

pipenvとpyenvでの環境構築

まずはpythonのインストール

$ pyenv install 3.8.2

3.8.2のところは自分の入れたいpythonのヴァージョンを指定してください.3.9.0だとPytorchが入らなかったので以前のパソコンで使っていた3.8.2を入れました.

シェルの設定

macOSはCatalinaからデフォルトのシェルはzshになっているので.zprofileに書き込みます(ちなみにbashでもできる).

$ nano ~/.zprofile    #.zprofileを開くコマンド

下記の内容をコピペして貼り付ける.

.zprofile
export PYENV_ROOT=${HOME}/.pyenv
if [ -d "${PYENV_ROOT}" ]; then
    export PATH=${PYENV_ROOT}/bin:$PATH
    eval "$(pyenv init -)"
fi

書き込んだら,control + x → y → returnで戻れる.
次に下のコマンドで先程書き込んだ内容を反映させる.

$ source ~/.zprofile

ディレクトリを作り仮想環境を作る

とりあえずディレクトリの名前をhogehogeとして作ります.

$ mkdir hogehoge

次にhogehogeに移動する.

$ cd hogehoge

pythonのヴァージョンを指定する.

hogehoge
$ pyenv local 3.8.2    #3.8.2の所は自分の使うpythonのヴァージョンを指定してください

pythonのヴァージョンを確認.

hogehoge
$ pyenv version
3.8.2 (set by /Users/ホームディレクトリ名/hogehoge/.python-version)

python 3.8.2の仮想環境を作る.

hogehoge
$ pipenv --python 3.8.2
Virtualenv already exists!
Removing existing virtualenv...
Warning: the environment variable LANG is not set!
We recommend setting this in ~/.profile (or equivalent) for proper expected behavior.
Creating a virtualenv for this project...
Pipfile: /Users/ホームディレクトリ名/hogehoge/Pipfile
Using /Users/ホームディレクトリ名/.pyenv/versions/3.8.2/bin/python3.8 (3.8.2) to create virtualenv...
⠏ Creating virtual environment...created virtual environment CPython3.8.2.final.0-64 in 547ms
  creator CPython3Posix(dest=/Users/ホームディレクトリ名/.local/share/virtualenvs/hogehoge--aKlzNkT, clear=False, global=False)
  seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/Users/ホームディレクトリ名/Library/Application Support/virtualenv)
    added seed packages: pip==20.2.4, setuptools==50.3.2, wheel==0.35.1
  activators BashActivator,CShellActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator

✔ Successfully created virtual environment! 
Virtualenv location: /Users/ホームディレクトリ名/.local/share/virtualenvs/hogehoge--aKlzNkT
Creating a Pipfile for this project...

上の様になれば上手くいってます.

仮想環境に入る

このコマンドで仮想環境に入ります.

hogehoge
$ pipenv shell
Launching subshell in virtual environment...
 . /Users/ホームディレクトリ名/.local/share/virtualenvs/hogehoge--aKlzNkT/bin/activate       
~/hogehoge:  . /Users/ホームディレクトリ名/.local/share/virtualenvs/hogehoge--aKlzNkT/bin/activate
(hogehoge) $  

一番下の行の一番左に(hogehoge)があれば仮想環境に入れてます.
ちなみに仮想環境を出るときはexitと打てば出れます.

pythonのライブラリのインストール

まずnumpyを入れてみる.

(hogehoge)
(hogehoge) $ pipenv install numpy
Installing numpy...
Adding numpy to Pipfile's [packages]...
✔ Installation Succeeded 
Pipfile.lock not found, creating...
Locking [dev-packages] dependencies...
Locking [packages] dependencies...
Building requirements...
Resolving dependencies...
✔ Success! 
Updated Pipfile.lock (456e4b)!
Installing dependencies from Pipfile.lock (456e4b)...
  ?   ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 0/0 — 00:00:00

入っているか確認してみます.

(hogehoge)
(hogehoge) $ cat pipfile
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]
numpy = "*"

[dev-packages]

[requires]
python_version = "3.8"

packagesのところを見るとnumpyが入ってることを確認.
こーゆー感じでライブラリを入れていきます.

Jupyter Notebookを使う

Jupyter Notebookの導入と立ち上げ

さっそくjupyter notebookをインストール.

(hogehoge)
(hogehoge) $ pipenv install jupyter notebook
Installing jupyter...
Adding jupyter to Pipfile's [packages]...
✔ Installation Succeeded 
Installing notebook...
Adding notebook to Pipfile's [packages]...
✔ Installation Succeeded 
Pipfile.lock (456e4b) out of date, updating to (b58be4)...
Locking [dev-packages] dependencies...
Locking [packages] dependencies...
Building requirements...
Resolving dependencies...
✔ Success! 
Updated Pipfile.lock (b58be4)!
Installing dependencies from Pipfile.lock (b58be4)...
  ?   ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 0/0 — 00:00:00

上の様になれば成功です.
次にJupyter Notebnookを立ち上げます.

(hogehoge)
(hogehoge) $ jupyter notebook

立ち上げるとブラウザが開き下図が表示されます.右側に見えるNewをクリックしPython3を選んでください.
Screen Shot 2020-11-13 at 0.51.33.png

Numpyが使えるか確認してみる.
Screen Shot 2020-11-13 at 0.54.40.png

しっかり使えてます.これで一通り環境構築は終わりです.あとは自分の使うライブラリをインストールしていってください.終了のさせかたはググってください笑

最後に

初心者にもわかりやすく伝わるように書いたつもりです.なにか修正点や追記したほうが良いことなどがあれば教えて下さい.ちなみに自分はJupyter LabよりJupyter Notebook派です(一応どっちも入れてる).理由はコマンドでタブの移動ができるという点だけなんですけど.でもJupyter Notebookは開発が終わり,Jupyter Labに移行すると公式が発表してるらしいのでJupyter Labに切り替えた方が良いのかなと思ったりします.Jupyter Labの入れ方はググれば結構記事が出てくるので,Jupyter Labを使いたい人はそっちを参考にしてください.この記事のpythonのライブラリのインストールまでは手順は一緒で大丈夫です.

おまけ

system全体のpythonのヴァージョンを変更する.(インストールしたヴァージョンしか使えない).

$ pyenv global x.x.x    #x.x.xには自分の指定したいヴァージョンを入れる

ライブラリを一気にインストールする

$ pipenv install numpy pandas matplotlib ...

上の様に一括でインストールできるが,Jupyter Notebookの様に間にスペースが入るやつを入れると失敗するので気をつけてください.

毎回pipenv shellをしないでディレクトリ移動時に自動で仮想環境に入る

.zprofileに下のやつを書き込んでください.すると毎回自動で仮想環境に入ってくれます.

.zprofile
# run pipenv shell automatically
function auto_pipenv_shell {
    if [ ! -n "${PIPENV_ACTIVE+1}" ]; then
        if [ -f "Pipfile" ] ; then
            pipenv shell
        fi
    fi
}

function cd {
    builtin cd "$@"
    auto_pipenv_shell
}

auto_pipenv_shell
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む