20210907のMacに関する記事は7件です。

homebrewをM1チップのmacにインストールする手順と注意点

◎こちらの記事を参考に実行 この記事の最後で実行している以下のコマンドについて補足 echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> /Users/ユーザ名/.zprofile evalコマンドとは 指定した文字列を評価後(環境変数も評価後)に連結して、現在のシェルに実行させます。 今回の場合はbrew shellenvを実行しているようだ。 brew shellenv は数行の export 文が出力されるので、コレを eval することで、brew コマンドがそのシェルで動作するようになる。 ※参考記事
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

VSCode x DockerでXdebugを使えるようにする

はじめに この記事では、Visual Studio Code、Docker Desktop の導入方法は説明しません。 Xdebugのバージョンは2系と3系を使います。 環境 macOS Big Sur --version 11.3 Visual Studio Code --version 1.60.0 Docker Desktop --version 3.6.0 Visual Studioで必要な拡張機能をインストール felixfbecker.php-debug をインストールしてください ディレクトリ構成 . ├── .vscode │   └── launch.json ├── Dockerfile ├── docker-compose.yml ├── php.ini └── src └── index.php Dockerfile Xdebug2を使う場合 FROM php:7.4-apache RUN pecl install xdebug-2.8.1 \ && docker-php-ext-enable xdebug WORKDIR /var/www/html Xdebug3を使う場合 FROM php:7.4-apache RUN pecl install xdebug \ && docker-php-ext-enable xdebug WORKDIR /var/www/html docker-compose.yml version: "3.7" services: app: build: '.' ports: - 8088:80 volumes: - ./src:/var/www/html/ - ./php.ini:/usr/local/etc/php/php.ini php.ini Xdebug2を使う場合 [xdebug] xdebug.default_enable=1 xdebug.idekey=VSCODE xdebug.remote_autostart=1 xdebug.remote_enable=1 xdebug.remote_host=host.docker.internal xdebug.remote_log=/tmp/xdebug.log xdebug.remote_port=9000 Xdebug3を使う場合 [xdebug] xdebug.client_host=host.docker.internal xdebug.client_port=9000 xdebug.idekey=VSCODE xdebug.log=/tmp/xdebug.log xdebug.mode=debug xdebug.start_with_request=yes 2021/09/08 修正 xdebug.remote_host=docker.for.mac.localhostでも動きますが現在非推奨です。 /src/index.php <?php phpinfo(); ./vscode/launch.json てんとう虫のマークを押して「launch.jsonファイルを作成します。」を押します。 PHPを選択します。 作業ディレクトリ配下に「.vscode」ディレクトリと「lauch.json」が作成されます。 launch.json を編集します。 { "version": "0.2.0", "configurations": [ { "name": "Listen for Xdebug", "type": "php", "request": "launch", "port": 9000, "pathMappings": { "/var/www/html/": "${workspaceRoot}/src" }, }, { "name": "Launch currently open script", "type": "php", "request": "launch", "program": "${file}", "cwd": "${fileDirname}", "port": 9000, "runtimeArgs": [ "-dxdebug.start_with_request=yes" ], "env": { "XDEBUG_MODE": "debug,develop", "XDEBUG_CONFIG": "client_port=${port}" } } ] } Dockerコンテナを起動 ターミナルを開き、作業ディレクトリへ移動します。 user@Mac ~ % cd /path/to/a/directory/ コンテナをビルドした後に起動します。 ちょっと時間がかかるかもしれません。 user@Mac directory % docker-compose build user@Mac directory % docker-compose up -d ブラウザで http://localhost:8088/index.php にアクセスし、 phpinfoの画面が表示されればOKです。 VSCodeでデバッグする ブレークポイントを付ける デバッグを開始する 「Listen for Xdebug」を選び「▷」ボタンを押すと下の画面のようになります。 http://localhost:8088/index.php を更新すると下の画面のようになり、デバッグができます!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Python】ccxtライブラリをmacOSにインストールしてみた

はじめに みなさんmacOSにpythonのライブラリをインストールして活用していますか? 今回はccxtライブラリをインストールする方法を紹介します。 環境 ・python3.7 ・macOS(Catalina 10.15.7) 参考 私は色々なライブラリをインストールしすぎてもう何が入っているかもうわかりません。 そんな時はターミナルで確認ができます。 右上の虫眼鏡マークをクリックし[ターミナル]と入力します。 トップヒットに出てくるターミナルをクリックします。 以下のコマンドを入力して下さい。 $ pip3 list インストールしたライブラリの一覧が表示されます。 プログラム さて、今回はccxtというライブラリをインストールしたいと思います。 ccxtとは複数の仮想通貨取引所のAPI操作が集約されたライブラリです。ccxtを実行することで複数取引所のAPIを容易に呼び出せます。なので仮想通貨の板情報を取得したり、取引を自動化することができます。 私はwindows環境にインストールして情報取得していたのですが、macOS環境にはインストールしていなかったのでインストールしてみたいと思います。 ちなみにccxtをインストールしていない状態でimport ccxtコマンドを打つと以下のようなエラーメッセージが出力されます。 Traceback (most recent call last): File "/Users/hirockio/Desktop/ccxt.py", line 1, in <module> import ccxt ModuleNotFoundError: No module named 'ccxt' ではccxtライブラリをインストールしてみましょう。 と言っても超かんたんです。 1.ターミナルを起動します。 2.以下のコマンドを入力します。 $ pip3 install ccxt 以下のエラーが発生した場合は、インストールの権限がありません。 スーパーユーザで実行する必要があります。 Could not install packages due to an EnvironmentError: [Errno 13] Permission denied: '/Library/Python/2.7/site-packages/ccxt-1.55.95.dist-info' Consider using the `--user` option or check the permissions. スーパーユーザでコマンドを実行する必要があります。パスワードが聞かれますので入力して下さい。 余談ですが「sudo」は「substitute user(もしくはswitch user) do」の略みたいです。 $ sudo pip3 install ccxt 以下が表示されたらインストール成功です。 Successfully installed ccxt-1.55.95 最後に ccxtの使い方はまた別の記事に書きたいと思います。 ご参考になれば幸いです。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

MacでSourceTreeを使ってGithubに接続する

この記事は、初めてSourceTreeを使ってGithubに接続するかた向けの内容です。 主に自分の備忘録のために書いています。 間違った点などありましたら、ご指摘いただけますと嬉しいです。 なお、Git自体の仕組みについては割愛します。 ご参考までに、私は「Gitが、おもしろいほどわかる基本の使い方33」という本を読んでGitの仕組みを勉強しました。 環境と条件 macOS Big Sur 事前にGithubのアカウントを登録してください。 事前にSourceTreeをダウンロードしてください。 大まかな手順 github上に、リモートリポジトリを作る。 SourceTreeにGithubのアカウントを追加する(HTTPS) SSHでGithubに接続する 以下へ、詳細を記載します。 1.github上に、リモートリポジトリを作る。 ここでは、後の作業でリポジトリが表示されているかどうか確認するために、テストでリポジトリを作ります。 Githubにログインして、「New repository」から、リポジトリを新規作成します。 「Repository name」に任意の名前を入力します。 「Public」は公開リポジトリ、「Private」は非公開リポジトリです。任意で選んでください。 最後に、「Create repository」をクリックで、リポジトリの作成は完了です。 2.SourceTreeにGithubのアカウントを追加する(HTTPS) SourceTreeの「環境設定」から「アカウント」を開きます。 「追加」をクリックして、以下のように選択・入力し、「保存」をクリックします。 ホスト:Github 認証タイプ:お好みで(BasicはGithubのIDとPWで認証します。OAuthはブラウザでGithubのページを開いて認証します。) プロトコル:HTTPS すると、SourceTreeの「リモート」画面に、Githubで作ったリモートリポジトリが表示されます。 使いたいリモートリポジトリの右側にある「クローン」をクリックして、保存先(任意)と名前を入力して「クローン」をクリックすれば、ローカルのパソコンにリモートリポジトリをクローンできます! これでバージョン管理ができるようになります! 3.SSHでGithubに接続する。 ここまでで、SourceTreeを使ってGithubに接続して、バージョン管理を行えるようになりました。 しかし、大切なデータですから、よりセキュリティを高めて使いたいですよね。 そこで、SSHでGithubに接続する方法を記載します。 SSHでGithubに接続するには、以下作業が必要となります。 秘密鍵と公開鍵を作る。 公開鍵をGithubに登録する。 では、ご紹介します。 秘密鍵と公開鍵を作る。 今回は、SourceTreeを使って秘密鍵と公開鍵を作ります。 SourceTreeに登録しているGithubのアカウントのプロトコルをSSHへ変更する。 SourceTreeの「環境設定」から「アカウント」を開き、先程追加したアカウントを選択して「編集」をクリックし、「プロトコル」を「SSH」へ変更します。 すると、「SSHキー」の項目が表示されますので、「キーを生成」をクリックしてください。 次の画面で、SSHキーを作成します。 パスフレーズを入力して「作成」をクリックします。 (パスフレーズは、忘れないように管理してください。) これで、SSHキー(秘密鍵と公開鍵)を作成できました。 先程の画面に戻り、SSHキーの下にある「クリップボードにコピー」がクリックできるようになっていますので、ここをクリックして、公開鍵の内容をコピーしてください。 最後に、「保存」です。 Githubに公開鍵を登録する。 続いて、Githubに移動します。 右側の自身のアイコンから「Settings」をクリックします。 左側のメニューに、「SSH and GPG keys」がありますので、こちらを開き、「SSH keys」の「New SSH key」をクリックします。 以下画面のkeyのところに、先程SourceTreeでコピーした公開鍵の内容をペーストしてください。(「Title」は、自身が管理しやすい名前を入力してください。) 最後に、「Add SSH kays」をクリックしてください。 以上の手順で、SSHでGithubに接続できるようになりました! 問題などがなければ、ここで「MacでSourceTreeを使ってGithubに接続」が完了となります! Githubで「Private(非公開)」にしているリポジトリが表示されない場合。 Githubで、Private(非公開)にしている場合かつ、二段階認証にしている場合、SourceTreeのリモートリポジトリ一覧にPrivate(非公開)リポジトリが表示されないことがあります。その場合は、 Githubにてトークンを用意 SourceTreeの「アカウント」の「認証タイプ」を「Basic」へ変更 パスワードへ(1.)で用意したトークンを入力(発行したトークンは、何度か使うので、メモしておくことをおすすめします。) すると表示されるそうです。(SSH接続も必須の模様) 以下記事を参考に、解決いたしました!ありがとうございます! https://qiita.com/akidon0000/items/cd482d4d7346f0c5b288 repository not found!のエラーになってクローンできない場合(SSHでクローンできない) ここ、だいぶハマりました…。 SSHでクローンしてみようとしたのですが、「repository not found!」と表示され、クローンできず…。 しかし、httpsではクローンできていました。 自力では解決できなかったので、I氏に助けていただきました!ありがとうございます!! 以下へ、I氏に教えていただいた内容を記載します。 SSHの接続ができているか確認する ここから、自身のマシンのターミナルを操作します。 まず、SSHの接続ができているか確認するため、ターミナルを開いて、以下コマンドを打ちます。 $ ssh -T git@github.com もし、以下メッセージが表示されたら、「yes」で実行してください。 The authenticity of host 'github.com (【IPアドレス】)' can't be established. RSA key fingerprint is 【フィンガープリント】. Are you sure you want to continue connecting (yes/no/[fingerprint])? SSHで接続できている場合は、以下メッセージが表示されますが、そうでない場合は、configファイルの設定を見直す必要があります。 Hi 【ユーザー名】 You've successfully authenticated, but GitHub does not provide shell access. (上記メッセージが表示されたら、SSH接続は成功している。) ~/.ssh/config の設定を見直す。 成功メッセージが出ない場合は、以下の手順で設定を見直していきます。 ターミナルを開いて、秘密鍵が入っているディレクトリへ移動 $ cd .ssh/ configをvimで編集 $ vi config ファイルの中に、SourceTreeが以下のように設定を書いてくれています。 # --- Sourcetree Generated --- Host 【SourceTreeが設定したファイル名】 HostName github.com User 【Githubのユーザー名】 PreferredAuthentications publickey IdentityFile 【秘密鍵のディレクトリ】 UseKeychain yes AddKeysToAgent yes # ---------------------------- これを少しだけ編集します。 vimをインサートモードにします。(キーボードの「i」を打つと、インサートモードになります。) インサートモードにすると、configファイルが編集できるようになりますので、キーボードの十字キーで「Host 【SourceTreeが設定したファイル名】」と書いてある行に移動し、半角スペースを空けて、「github.com」と追記します。 # --- Sourcetree Generated --- Host 【SourceTreeが設定したファイル名】 github.com HostName github.com User 【Githubのユーザー名】 PreferredAuthentications publickey IdentityFile 【秘密鍵のディレクトリ】 UseKeychain yes AddKeysToAgent yes # ---------------------------- 追記したら、エスケープキーを叩いて、インサートモードから抜けます。 続いて、「:wq(上書きして閉じる)」を叩いて、vimを終了します。 これで、configファイルの設定が終わりました。 改めてSourceTreeを開くと、「アカウントに接続できない」とエラーが表示されることもありますが、SourceTreeの「環境設定」内「アカウント」を再設定すると、問題なく接続できるようになります! ふー!お疲れさまでした〜〜〜!!! ターミナルを使って秘密鍵と公開鍵を作る。 以下は、自分のための、ターミナルを使って秘密鍵と公開鍵を作る方法メモ 今回は、SourceTreeを使って秘密鍵と公開鍵を作りましたが、必要な場合に備えて、ターミナルを使って秘密鍵と公開鍵を作る方法もメモしておきます。(自分のために) 秘密鍵と公開鍵を作る。 ターミナル起動する。 以下コマンドで、Mac内でSSHの鍵を管理しているディレクトリへ移動する。 $ cd .ssh 以下コマンドを叩いて、秘密鍵と公開鍵を作成。 $ ssh-keygen -t rsa 続いて、秘密鍵と公開鍵のファイル名を聞かれますので、わかりやすいように「(GithubのID)-GitHub」と指定します。 以上で、秘密鍵と公開鍵ができました。 まだターミナルでの作業がありますので、そのままにしたまま以下手順へ進んでください。 公開鍵をGithubに登録する。 次に、先程作った公開鍵をGithubに登録します。 以下コマンドで、公開鍵をクリップボードにコピーします。 $ pbcopy < (GithubのID)-GitHub.pub ブラウザからGithubへログインし、公開鍵の設定画面を開きます。 key に先ほどクリップボードにコピーした公開鍵をペーストします。 Titleには、今お使いの端末がわかるものを入れると管理しやすくなります。(秘密鍵と公開鍵は端末ごとに設定した方がセキュリティが上がります。) add SSH Key をクリックして、鍵を登録します。 SourceTreeのアカウント環境設定で、アカウントの内容を変更する。 最後に、SourceTreeの画面から設定を変更します。 環境設定から、アカウントを開く。 「HTTPSでGithubに接続する。」の手順で登録したGithubのアカウントをクリック。 以下の内容へ修正。 認証タイプ:SSH SSHキー:「秘密鍵と公開鍵を作る。」で作った公開鍵が設定されていることを確認。 「保存」をクリック。 以上です! 拝見した記事 記事作成にあたり、以下記事も拝見しました。ありがとうございました! 【Mac】Gitの環境構築をしよう! Mac GitHub SSH接続設定 SourcetreeからGithubにSSH接続する 【プログラミング初心者向け】MacでSourcetreeを使ってGitの開発環境を構築する(GitHub + Sourcetree) 秘密鍵・公開鍵を作成する(Mac)
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

shellスクリプトで複数のpdfの最初のページにハンコを押す

shellスクリプトで複数のpdfの最初のページにハンコを押す 概要 複数のPDFの最初のページにハンコを押して行き最後に一つのファイルにまとめる。 前提条件 MAC homebrew が入っている 事前準備 ghostscript(PDF対応のため)とimagemagick(画像操作アプリ)をインストールしておく。 brew install ghostscript brew install imagemagick フォルダ構造 ./ ./hanko.png < ハンコpngファイル ./pdfin/ < PDFたちを置く場所 ./pdfout/pdfin/ < 出来上がったpdfが入る場所 ./pdfout/omatome.pdf < おまとめPDF ./work/ < 作業スペース 使い方 ダウンロードした請求書PDF(結合前)たちを入手する どこかに作業フォルダを作ってそこに cd する 「pdfin」ディレクトリを作る hanko.pngを「./」におく ./pdfin に請求書PDFたちを置く 下にあるShellScriptをコピペする。(+enter) ./pdfout/pdfin/ にハンコが押されたファイルができる いつものように結合する カスタマイズ +400+750 の部分を変えれば画像が重なる場所が変わる hanko.pngを変えれば画像が変わる ShellScript コピペする echo echo "PDFにハンコを押します" mkdir ./work rm -rf ./pdfout/pdfin mkdir ./pdfout/pdfin for FILE in ./pdfin/* ; do echo "$FILE の処理をしています" rm -rf ./work mkdir ./work convert -define png:color-type=6 -density 300 "${FILE}" ./work/page.png FIRSTFILE=$(ls ./work/page*.png|head -n1) composite -density 300 -gravity northwest -geometry +400+750 -compose over ./hanko.png "$FIRSTFILE" "$FIRSTFILE" convert -define png:color-type=6 ./work/page*.png ./pdfout/"${FILE}" done echo "PDFを一つにまとめています" convert -density 300 ./pdfout/pdfin/* ./pdfout/omatome.pdf echo "./pdfout/omatome.pdf"
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

(Mac) AutomatorとVisual Studio Codeを使って100個のC言語のプログラム実行結果の取得を自動化した話

目次 はじめに 前提条件 自動化するための手順 おわりに はじめに アルバイトとして大学のプログラミング講義で学生から提出されたプログラム課題の採点業務を担当しています。 約100人×数個の課題分だけプログラムの実行結果を見て採点を行う必要があるのですが、手作業でプログラムの実行確認を行うことはとても大変です。 調べてみたところ、プログラムの実行結果の取得をAutomatorによって自動化することができたので、その方法を記録として残します。 100個のC言語のプログラム実行結果を自動的に取得している画面の録画は以下のYouTube動画へアップロードしています。 https://youtu.be/GzCoYjB-FCM 本来は学生から提出された100個のプログラムを実行するのですが、動画では同じサンプルプログラム100個を実行しています。 MacのAutomatorをうまく使えば、大学のプログラミング課題の実行結果の取得を自動化するだけでなく、他のことにも応用できそうです。(ただ、使い勝手が難しいところもありました…。) 前提条件 パソコン: Mac OS Big Sur 11.5.2 (MacのAutomatorを使えるのであれば、他のバージョンでも問題ないと思います。WindowsではAutomatorが使えないので、今回の記事は参考になりません。) プログラムの実行環境:Visual Studio Code (他のエディターでも対応できると思いますが、Automatorの自動化の際に、マウスのクリックが記録されないエディターがある可能性があるので注意が必要です。) プログラミング課題の内容:今回はC言語の課題ですが、他の言語でも対応できると思います。出力結果の確認は、学生ごとにスペースの位置や改行などが微妙に異なっているため、目視で正しいかを判断します。(この作業は大変なので改善が必要ですね。)プログラムの実行結果のみを見て採点する方法です。 自動化するための手順 Visual Studio Codeで採点したいプログラムを開きます。今回は100個のC言語のプログラムを開きました。 100個のC言語のプログラム実行結果をVisual Studio Codeのターミナルで表示されるログに出力するのですが、出力した行数が1000を超えると上から順番に消されてしまうため、以下のサイトを参考に 「"terminal.integrated.scrollback": 10000,」と変更し、表示されるログの行数を10000などに変更します。 Automatorでは、「Visual Studio Codeのウィンドウをマウスでクリックする」ことの記録ができない(?)ため、Visual Studio Code上でプログラムを実行する・実行するプログラムを切り替えることなどを全てキー入力で行い、Automatorに記録させる必要があります。 MacのVisual Studio Codeでは、「Control + Shift + @」でエディタとターミナルを切り替えることができるのですが、Automatorの「Control + @」で別のショートカットキーが起動してしまい、キー入力の記録を受け付けてくれませんでした。 そこで以下の記事を参考に、エディタからターミナルを切り替えるショートカットキーを例えば「Control + Shift + 0」など他のショートカットキーと重ならない適当なキー入力に置き換えます。 以下の記事を参考に、Automatorでワークフローを作成します。 ワークフローは上記の画像のとおりになりました。 1つずつ操作の意味を簡単に説明します。 Option + Control + N:C言語のプログラムを実行します。 Shift + Control + 0:以前の手順で登録した「エディタからターミナルにフォーカスを切り替える」ショートカットキーです。 Command + V:C言語のプログラムを実行する際に入力として必要な文字列をペーストします。 Return:入力として必要な文字列を確定させ、C言語のプログラム上のfgetsで読み込ませます。 Shift + Control + 0:ターミナルからエディタにフォーカスを切り替えます。 Command + W:実行したC言語のプログラムを閉じます。 以上のワークフローを実行することによって、Visual Studio Codeのターミナル上に実行ログが追記されていきます。 おわりに 自動化によって、以下の画像のキー入力を行ってプログラムの実行結果を取得する作業を自動化することができました。 Automatorを実際に利用すると分かるのですが、思ったとおりに動いてくれないことが多く、なかなか大変です。 Visual Studio Codeで100個のC言語のプログラム実行結果を取得する方法は、他にあるかもしれないです。ご存じでしたら教えていただけると助かります!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

OpenJDKのインストール(mac)

はじめに 最近PCを入替えたので備忘を兼ねてメモ 最新版だけ入れておけばいいんだけど、レガシーなシステムだといまだに JDK8 を使っていたりするので、OpenJDK いれて切り替えができるまでの手順を残しておく やりたいこと OpenJDK のインストール バージョンの切替ができること 環境情報 % sw_vers ProductName: Mac OS X ProductVersion: 10.15.7 BuildVersion: 19H1323 やったこと homebrew で OpenJDK のインストール バージョンの切替 1.homebrew で OpenJDK のインストール adoptopenjdk の OpenJDK をインストールします。 今回は、8, 11 のインストールを行います # JDK 8 のインストール % brew install adoptopenjdk8 --cask ? adoptopenjdk8 was successfully installed! # JDK 11 のインストール % brew install adoptopenjd11 --cask ? adoptopenjdk11 was successfully installed! 無事、インストールできました。 ※そういえばいつのまにか「cask」コマンドの使い方が変わっていたんですね ※「brew cask install xxx」 → 「brew install xxx --cask」 ここまでで、インストールされた OpenJDK のバージョンを確認しておきます % /usr/libexec/java_home -V Matching Java Virtual Machines (2): 11.0.11, x86_64: "AdoptOpenJDK 11" /Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home 1.8.0_292, x86_64: "AdoptOpenJDK 8" /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home ちゃんと、 8, 11 が入ってますね また、この時点時点では、 OpenJDK11 が有効化されているようです java -version openjdk version "11.0.11" 2021-04-20 OpenJDK Runtime Environment AdoptOpenJDK-11.0.11+9 (build 11.0.11+9) OpenJDK 64-Bit Server VM AdoptOpenJDK-11.0.11+9 (build 11.0.11+9, mixed mode) 2.バージョンの切替 では、バージョンの切替をやっていきます。 やることとしては、JAVA_HOMEにパスを通しておけばOKですね 現在 OpenJDK 11 が有効になっているので、これを 8 に切り替えます % export JAVA_HOME=`/usr/libexec/java_home -v 1.8` % java -version openjdk version "1.8.0_292" OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_292-b10) OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.292-b10, mixed mode) できました。 同様に、11 にしたいときは、 % export JAVA_HOME=`/usr/libexec/java_home -v 11` % java -version openjdk version "11.0.11" 2021-04-20 OpenJDK Runtime Environment AdoptOpenJDK-11.0.11+9 (build 11.0.11+9) OpenJDK 64-Bit Server VM AdoptOpenJDK-11.0.11+9 (build 11.0.11+9, mixed mode)``` とすればOKです。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む