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

Box CLI を使ってみる

Box CLI を Mac で使うまでの手順(メモ)

少しずつ追加する予定・・・

目的

Mac のターミナルから Box を操作するために CLI SDK 入れて動かす。

何が出来るのか一通り試すにはコマンドが一番手っ取り早いのでは?的な。

セットアップ

Box CLIのインストール に従ってセットアップ

基本的な流れは
1. CLI ツールをインストール
2. 設定ファイルを作成
という感じ。

CLI をインストール

下記のURLからダウンロードできる。

https://github.com/box/boxcli/releases

設定ファイルを作成

Box Developer Console で JWT認証を使った Boxアプリケーションをセットアップし、設定ページから JSON構成ファイルをダウンロードする、と言う流れ。

カスタムアプリの作成

  1. Box Developer Console にアクセス
  2. 「アプリの新規作成」をクリック
  3. 「カスタムアプリ」を選択して「次へ」
    dev-newapp.png
  4. 認証方法で「JWTを使用したOAuth 2.0(サーバー認証)」を選択して「次へ」
    dev-newapp-auth.png
  5. アプリに名前をつけて「アプリの作成」をクリック

JWTキーペアを生成

  1. アプリケーションの左側のサイドバーで[構成]オプションをクリック
  2. [公開キーの追加と管理]セクションで[公開/秘密キーペアを生成]ボタンをクリック
    dev-app-config.png
    1. 2要素認証の警告が出たら設定しておく
      warning-2fa.png
    2. 追加認証を有効に dev-userconfig-2fa.png
  3. 秘密鍵が含まれたJSONファイルが落ちてくるので保存

上記の手順を行わないで進めると構成ファイルのロード時にエラーになる。

% box configure:environments:add 0__config.json 
Config object missing key boxAppSettings.appAuth.publicKeyID

アプリの承認

  1. アプリケーションの左側のサイドバーで[一般]リンクを選択
  2. [アプリの承認]セクションで 「承認用に送信」を選択
    dev-app-auth.png
  3. アプリの承認
    1. box管理画面の[アプリ > カスタムアプリ] で「新しいアプリケーションを承認」をクリック
    2. クライアントID(APIキー)を入力して「次へ」
    3. 確認画面が出るので「承認」
      admin-custom-apps-dl.png

この手順を行わずに進めた場合、コマンド実行時に下記のエラーが発生する

% box folders:get 0
Unexpected API Response [400 Bad Request] unauthorized_client - This app is not authorized by the enterprise admin

構成ファイルを CLI に設定する

ダウンロードした構成ファイルを指定してコマンドを実行して構成を追加

% box configure:environments:add PATH_TO_CONFIG_FILE
Successfully added CLI environment "default"

Successfully となっていれば成功!

構成ファイルについて

CLI には複数の構成ファイルを読み込むことが可能。

構成ファイルの追加

複数の構成ファイルを読み込む場合には名前をつけて読み込む。

% box configure:environments:add entgov_user1_app.json -n user1_app
Successfully added CLI environment "user1_app"

https://github.com/box/boxcli/blob/master/docs/configure.md#box-configureenvironmentsadd-path

構成ファイルの切り替え

configure:environments:set-current で切り替える環境の名前を渡せば切り替わる。

user1_app に切り替える場合は下記のコマンドを実行する。

% box configure:environments:set-current user1_app

環境の一覧は下記のコマンドで取得可能

% box configure:environments:get

実行ユーザーを取得

上記の手順で作成した構成ファイルを使って Box CLI を実行した場合、サービスアカウントで実行される。

作成者の権限で実行されるわけでない。

CLI でコラボレータとして操作する場合、対象のファイルやフォルダに対してサービスアカウントに権限がないとエラーになる。

サービスアカウントの確認方法

下記のコマンドを実行して、 Login: の値として返却される値がサービスアカウント。

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

hugoで’hugo server'でプレビューしようとしたらError: listen tcp ***: socket: too many open filesが出た時の対処方法

hugo serverコマンド使用時の注意点

hugo serverで作っているwebページを確認しようとしたらこんなエラーがでた。

Serving pages from memory
Running in Fast Render Mode. For full rebuilds on change: hugo server --disableFastRender
Web Server is available at //localhost:49744/ (bind address 127.0.0.1)
Press Ctrl+C to stop
ERROR 2020/08/04 13:36:01 Error: listen tcp 127.0.0.1:49744: socket: too many open files

エラーをググるとファイル数を一気に開けないことで上記の症状が起こる模様

調べてみると、自分が作っているサイトに関しては
スクリーンショット 2020-08-04 13.46.29.png
14000オーバー。
これが原因。

自分の設定の確認方法

keineme% ulimit -n
12800
keineme% ulimit -a
core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
file size               (blocks, -f) unlimited
max locked memory       (kbytes, -l) unlimited
max memory size         (kbytes, -m) unlimited
open files                      (-n) 12800←ここが足りてない
pipe size            (512 bytes, -p) 1
stack size              (kbytes, -s) 65532
cpu time               (seconds, -t) unlimited
max user processes              (-u) 2784
virtual memory          (kbytes, -v) unlimited

対応方法

/Library/LaunchDaemons/limit.maxfiles.plist
ここにファイルを作成する。

limit.macfikes.plist
<?xml version="1.0" encoding="UTF-8"?>  
  <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"  
          "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  <plist version="1.0">
    <dict>
      <key>Label</key>
      <string>limit.maxfiles</string>
      <key>ProgramArguments</key>
      <array>
        <string>launchctl</string>
        <string>limit</string>
        <string>maxfiles</string>
        <string>65000</string> // ここの数字は扱う数より大きければよい
        <string>65000</string> // 同様
      </array>
      <key>RunAtLoad</key>
      <true/>
      <key>ServiceIPC</key>
      <false/>
    </dict>
  </plist>

このファイルを保存してOS再起動。
再起動して再度コマンド入力。

keineme% ulimit -a
core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
file size               (blocks, -f) unlimited
max locked memory       (kbytes, -l) unlimited
max memory size         (kbytes, -m) unlimited
open files                      (-n) 65000
pipe size            (512 bytes, -p) 1
stack size              (kbytes, -s) 65532
cpu time               (seconds, -t) unlimited
max user processes              (-u) 2784
virtual memory          (kbytes, -v) unlimited

再度hugo serverを入力してプレビューがうまくいくことを確認する。

Linuxでも同様の状況が発生するとのことで同じ項目あたりで調べてみるとよいみたい。

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

MacBookを買い替えたときの環境設定メモ

概要

MacBook Pro(2020) を購入し、出荷時設定から実施した作業内容についてまとめたメモ。
随時追記予定。

経緯

大学時代に購入し、かれこれ7年ほど愛用してきた MacBook Air が「そろそろ引退させてくれ」と露骨にアピールするようになってきた1ので、重い腰を上げて買い替えることにした。
マシン酷使の最たる原因だった大学での研究活動からはとうに離れ、Twitter やネットサーフィン、動画視聴などライトな趣味範囲での使用となって久しいが、デスクトップでは Windows を使っているのでノートは Mac を持っておきたく、必然的に MacBook Air/Pro の2択に。
2020モデルから追加された新色は Air のゴールドが気になったが、Pro を触ってみたい欲とマシンスペックの魅力に勝てず、やや値が張りかつオーバースペックであることを承知の上で思い切って Pro を購入した。

給付金で実質半額だから……(小声)

作業内容

実施した作業から順に記載していく。
今後、何かしら設定した場合は追記する可能性あり。

環境設定

端末自体の環境設定項目。詳細な手順は気が向いたら追記するかも。

  • キーボードバックライト OFF
  • CapsLock キーを Control に割り当て
  • F11(デスクトップ表示)無効化
  • Bluetooth を OFF
  • トラックパッドをタップでクリック判定するように設定
  • ディスプレイの輝度自動調整 & TrueTone 設定 OFF
  • 蓋を閉じた瞬間にロックするように設定
  • メニューバーのバッテリーを残量(%)表示
  • メニューバーの時計を月日・秒を含めて表示

以下の設定は後述のアプリケーションインストール後に行う。

  • Dock から不要なアプリアイコンを削除(Finder, 夜フクロウ, Chrome, ゴミ箱以外)
  • ブラウザ(Chrome, 一応 Safari も)のリロードキーを Command+R から F5 に変更

Google 日本語入力

macOS 標準の IME は使い勝手があまりよくなかった2ので、使い慣れた IME をダウンロードする。
https://www.google.co.jp/ime/

Google Chrome

下記のサイトから Google Chrome をダウンロード & インストール。これで Safari は勇退。お疲れさまでした。
https://www.google.com/intl/ja_jp/chrome/

拡張機能(アドオン)

「Chrome アドオン おすすめ」などでググり、目についたものをいくつか突っ込む。
導入したアドオンは下記。

  • AdBlock
  • Autopagerize for Chrome
  • The Great Suspender

参考:【2020最新版】Chrome拡張機能おすすめ43選を用途別に紹介!【大幅な効率化と生産性を向上を!】

夜フクロウ

以前から愛用していた Twitter クライアント。App Store からダウンロード可能。
https://apps.apple.com/jp/app/%E5%A4%9C%E3%83%95%E3%82%AF%E3%83%AD%E3%82%A6/id428834068?mt=12

cdto

Finder で表示しているディレクトリをカレントディレクトリとしてターミナルを起動可能になるアプリ。下記ページから最新版をダウンロード。(当時最新:v3.1)
https://github.com/jbtule/cdto/releases

参考:Finderからターミナルを「現在のパスで」秒で開く!Mac拡張機能「cd to」

Touch Bar 無効化

アプリケーションごとに表示が変わって「おぉ……」となる Touch Bar だが、1分ぐらいで見飽きた 後述の iTerm を使うにあたって不便な面があるので一部のアプリをアクティブにしている際にはファンクションキーを常時表示させるようにする。
下記参考ページの手順に従い、次のアプリケーションを常時表示の対象とした。

  • Finder
  • Google Chrome
  • Safari
  • 夜フクロウ
  • ターミナル
  • iTerm(以降の手順でダウンロード後)
  • プレビュー
  • テキストエディット
  • システム環境設定
  • App Store

参考:Touch Bar 搭載の MacBook Pro でファンクションキーを使う方法

iTerm2

ブラウザを参照しながらコマンドを打つときなどに便利なターミナルアプリ。(当時最新:v3.3.12)
https://www.iterm2.com/downloads.html

設定等は下記ページを参考に。
F11 キーを押すと、半透明の新規ターミナルウィンドウを画面の右半分に開くように設定した。

参考:iTerm2のおすすめ設定〜ターミナル作業を効率化する〜
参考:iTerm を全画面で表示するのをやめて画面の左半分に表示するようにした

Homebrew

パッケージ管理ソフトとして Homebrew を導入。
参考ページの「mas-cliのインストール」までを実施。

参考:macOSでのパッケージ管理

shell のカスタマイズ

とりあえず shellzsh かなと思ったら、Catalina からはデフォルトのシェルが bash から zsh に変わっているらしい。これはラッキー。
ということで、見た目のカスタマイズテーマだけ変えるため、下記参考ページの「sorinからpureに変更してみる」までを実施。テーマは好みの問題で、pure ではなく peepcode $ にした。

参考:Catalinaのzshカスタマイズ備忘録

Ruby

下記ページを参考に、Ruby を最新の安定版(v2.7.1)にアップデート。

参考:MacでのRuby環境構築2020

Python

下記ページを参考に、Python を3.x系の最新版(v3.8.5)にアップデート。

参考:MacOSとHomebrewとpyenvで快適python環境を。

Scala

下記ページを参考に、JDKScala の最新版をインストール。

参考:ゼロから始めるScala (環境構築 mac)

Emacs

作業中

まとめ

肝心の開発環境関連を全く整備していないので、エンジニア向けではないただの作業メモになってしまったが気にしない。
新しい MacBook Pro では Touch ID でロック解除できるのが地味にうれしいが、Touch Bar を有効に使える日は果たして来るのだろうか……。


  1. ファンが日常的にフル稼働したり、バッテリーの減りが加速したり、動画の再生がカクついたり。枚挙に暇なし。 

  2. 2011年とかその辺りの記憶ベースなので、今は改善されているかも。 

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

MacBook を買い替えたときの初期設定などなど

概要

MacBookProを購入し、出荷時設定から実施した作業内容についてまとめたメモ。

経緯

大学時代に購入し、かれこれ7年ほど愛用してきたMacBookAirが「そろそろ引退させてくれ」と露骨にアピールするようになってきた1ので、思い切って買い替えることにした。
マシン酷使の最たる原因だった大学での研究活動からはとうに離れ、Twitterやネットサーフィン、動画視聴などライトな趣味での使用となって久しいが、デスクトップではWindowsを使っているのでノートはMacを使いたく、必然的にAirかProの2択に。
Airの新色(ゴールド)も気になったが、Proを触ってみたい欲とマシンスペックの魅力に勝てず、やや値が張りオーバースペックであることを承知の上でProを購入した。

給付金で実質半額だったので……

作業内容

随時追加予定。

環境設定

端末自体の環境設定項目。詳細な手順は気が向いたら追記するかも。

  • キーボードバックライトOFF
  • 蓋を閉じた瞬間にロック
  • メニューバーのバッテリーを残量(%)表示
  • BluetoothをOFF
  • ディスプレイの輝度自動調整&TrueTone設定OFF
  • メニューバーの時計を月日・秒を含めて表示
  • CapsLockキーをControlに割り当て
  • F11(デスクトップ表示)無効化
  • Dockから要らないアプリアイコンを削除2

Google 日本語入力

macOS標準のIMEは使い勝手があまりよくなかった3ので、使い慣れたIMEをダウンロードする。
https://www.google.co.jp/ime/

Google Chrome

下記のサイトからGoogle Chromeをダウンロード&インストール。これでSafariは勇退。
https://www.google.com/intl/ja_jp/chrome/

拡張機能(アドオン)

「Chrome アドオン おすすめ」などでググり、目についたものをいくつか突っ込む。
導入したアドオンは下記。

  • AdBlock
  • Autopagerize for Chrome
  • The Great Suspender

参考:https://www.webhack.jp/web-service/%E5%8A%B9%E7%8E%87%E5%8C%96%E9%96%93%E9%81%95%E3%81%84%E3%81%AA%E3%81%97chrome%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E6%8B%A1%E5%BC%B5%E6%A9%9F%E8%83%BD31%E9%81%B8/

夜フクロウ

以前から愛用していたTwitterクライアント。App Storeからダウンロード可能。
https://apps.apple.com/jp/app/%E5%A4%9C%E3%83%95%E3%82%AF%E3%83%AD%E3%82%A6/id428834068?mt=12

cdto

Finderで表示しているディレクトリをカレントディレクトリとしてターミナルを起動可能になるアプリ。下記ページから最新版をDL。(当時最新:v3.1)
https://github.com/jbtule/cdto/releases

参考:https://jimon.info/cd-to/

Touch Bar 無効化

アプリケーションごとに表示が変わるTouch Barだが、iTermを使うと不便な面があるので一部のアプリをアクティブにしている際にはファンクションキーを常時表示させるようにする。常時表示の対象としたアプリは下記。

  • Finder
  • Google Chrome
  • Safari
  • 夜フクロウ
  • ターミナル
  • iTerm(以降の手順でダウンロード後)
  • プレビュー
  • テキストエディット
  • システム環境設定
  • App Store

参考:https://support.apple.com/ja-jp/HT207240

iTerm2

ブラウザを参照しながらコマンドを打つときなどに便利なので入れておく。(当時最新:v3.3.12)
https://www.iterm2.com/downloads.html

設定等は下記ページを参考に。
F11キーを押すと、半透明の新規ターミナルウィンドウを画面の右半分に開くよう設定した。

参考:https://qiita.com/ruwatana/items/8d9c174250061721ad11
参考:https://this.aereal.org/entry/2015/12/21/145324

Homebrew

パッケージ管理ソフトとしてHomebrewを導入。
参考ページの「mas-cliのインストール」までを実施。
参考:https://qiita.com/takeshisakuma/items/e9685fb9e394212247c0

shellカスタマイズ

参考:https://qiita.com/devzooiiooz/items/a5f8fc33dee214f60f4e

Emacs

作業中

まとめ

Touch Barを有効に使える日は来るのだろうか……。


  1. ファンが日常的にフル稼働したり、バッテリーの減りが加速したり、動画の再生がカクついたり。枚挙に暇なし。 

  2. Finder, 夜フクロウ, Chrome, ゴミ箱以外を全て削除。 

  3. 2011年とかその辺りの話なので、今は改善されているかも。 

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

Macとラズパイ間でファイル転送したいのでラズパイをファイルサーバー化する

ラズパイ開発をしていると、ホストPCからファイルをサクッと転送したくなります。
本記事では、ラズパイ側にファイルサーバー建ててMacからアクセスできるようにしてみます。

先人たちのやり方に則ってsambaの環境構築を進めます

# sambaインストール
$ sudo apt-get install samba samba-common-bin

# 共有したいフォルダ作成
$ sudo mkdir /var/samba

# ユーザーを追加
$ sudo useradd smbuser

# ユーザーログインするためのパスワード設定
$ sudo passwd smbuser

# ユーザー権限を変更
$ sudo chown smbuser:smbuser /var/samba/

# ユーザーをデータベースに追加
# -aオプションはユーザーの追加と同時にパスワード同期を直ちに行ないたい場合に使用する
$ sudo pdbedit -a smbuser

Samba設定ファイルの更新

# バックアップ
$ sudo cp -p /etc/samba/smb.conf /etc/samba/smb.conf.backup
# 設定ファイルの修正
$ sudo vim /etc/samba/smb.conf

ファイルの末尾に以下を追記します

smb.conf
[raspberryPi]
    comment = RasPi FileServer
    path = /var/samba
    writable = yes
    browsable = yes
    valid users = smbuser
    force user = smbuser
項目 内容
comment 説明
path 共有するディレクトリ
read only ReadOnlyフラグ
browsable ネットワークに表示するフラグ
valid users アクセス可能なユーザー(,区切り)
force user アクセスしたら強制的にこのユーザーになる

sambaを再起動して準備は完了です。

$ sudo /etc/init.d/samba restart

sambaにMacからアクセス

Finder > 移動 > サーバ接続..からラズパイのsmb://IPアドレスと入力して接続します。

先程設定したユーザー/パスワードでログインします。

無事にMacからラズパイにアクセスでき、ファイルのやり取りが楽になりました。

環境

  • RasberryPi 3B
  • Raspbian GNU/Linux 9.8 (stretch)
  • Samba Version 4.5.16-Debian

参考

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

シンボリックリンク作成時に 「オリジナルの項目が見つからない」エラーの対処法

シンボリックリンクを張ると以下のようなエラーが出て失敗してしまったので、その解決備忘録です。

経緯

僕はPhotoshop Script(jsx)を開発する際に、git管理したいので作業環境のjsxをPhotoshopディレクトリ内にシンボリックリンクを張って作業します。

作業環境/hoge.jsx
↓
/Applications/Photoshop 2020/Presets/Scripts/hoge.jsx

以下のおなじみのlnコマンドで張ります。1

$ sudo ln -s '作業環境/hoge.jsx' '/Applications/Photoshop 2020/Presets/Scripts/'

image.png

アイコンが何かおかしい。
ダブルクリックしてみると、冒頭のキャプチャのエラーダイアログが表示され失敗したことが分かります。
※ファイルの情報でも確認できます。

解決方法

$ ln -s 元ファイル絶対パス リンク先絶対パス

このように絶対パスでlnコマンドを実行します。

image.png
関連付けされたAtomのアイコンが表示されて、ダブルクリックするとオリジナルファイルが開くようになりました。

成功。

まとめ

シンボリックリンクを張る場合は、相対パスではなく絶対パスを使用する。


  1. /Applications配下--9-9^-9-0^¥-09-0^9-0-09^-090-9-97-アクセス権限的にsudoを使っています 

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

MacでRealsenseをPythonで動かす。

はじめに

初投稿です。至らない部分があると思いますが、優しい目でみていただけると幸いです…
悪戦苦闘しました。ちなみにめちゃめんどい。

第一の罠

https://github.com/IntelRealSense/librealsense/blob/master/doc/installation_osx.md
公式にMacでのインストール方法は書いてある。しかし、どうやってプログラムをコンパイルできるのか分からなかった…

第二の罠

そこで、Pythonの環境を作ろうと決断。Ubuntuでの環境構築を参考にしようとして、

$ pip install pyrealsense2

をした。何も起きない。悲しい。
悲しいことにMacには対応していないみたいなので、自分でビルドするしかない。

第三の罠

ここで、Qiitaの記事を発見。
https://qiita.com/mizumasa/items/c6ca2c73fa86c9a5a39c
MacでPython環境を構築している方がいた!神!
早速、同じことをする。…結果、ダメだった?

第四の罠

もう悲しくて悲しくてしょうがなかった…
苦手な英語を読むことに決意。公式のライブラリにissueであった物を参考にした。
https://github.com/IntelRealSense/librealsense/issues/5275
多分これ読めばたいていの人は行けると思う。しかし、僕は無理だったのでとにかく悲しかった???

成功した方法

最後に僕の成功した方法を残しときます。
https://qiita.com/comachi/items/14b358568365bc5ee474
これ is 神。この記事が神でした。

神って言ったけど、これじゃできなかったので少し修正。
この記事の下の方、「シンボリック作成」の部分。

$ cd /usr/local/lib/python3.6/site-packages
$ ln -s /usr/local/lib/pyrealsense2.cpython-37m-darwin.so pyrealsense2.so
$ ln -s /usr/local/lib/pybackend2.cpython-37m-darwin.so pybackend2.so

こうあるんですけど、
- pyrealsense2.cpython-37m-darwin.so
- pybackend2.cpython-37m-darwin.so

こやつら、/usr/local/lib にいないんじゃ…
頑張って探しました。そしたら、
~/libreasense/build/wrapper/python/
にいたので、次のように変更。

$ cd /usr/local/lib/python3.6/site-packages
$ ln -s ~/libreasense/build/wrapper/python/pyrealsense2.cpython-37m-darwin.so pyrealsense2.so
$ ln -s ~/libreasense/build/wrapper/python/pybackend2.cpython-37m-darwin.so pybackend2.so

これでいけた!!!はず。

終わりに

まじで1週間くらいかかったので、残しとくことにしました。
C++の方は分からないので、みんなWindowsで開発しよう!!!

参考にしたサイト

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

MacからラズパイにVNC接続して遠隔操作する手順

Macから手持ちのラズパイ3Bに同一無線LAN内でVNC接続して遠隔操作しようとしたのですが、ひと手間掛ける必要があったためその備忘録となります。

MacからVNCでそのまま開けない

Finder > サーバへ接続...

ラズパイ側で予めifconfigコマンドでIPアドレスを調べておきます。

vnc://ラズパイのIPアドレス

しかし接続失敗します。

リモートコンピュータのソフトウェアが、このバージョンの画面共有と互換性がないようです。

このようなエラーが出てしまいます。

TightVNCを使用する

ラズパイ側

$ sudo apt-get install tightvncserver

apt-getコマンド1TightVNCをインストールします。

ラズパイ側でシェルで以下のコマンドを実行しTightVNCを起動しておきます。

$ tightvncserver

※初回パスワード設定が求められます。

Mac側

vnc://ラズパイのIP:5901でVNC接続すると、無事に接続できました。

これでラズパイに外部モニタやキーボードを繋ぐ必要はなくなりました。

余談

このままだとHDMIへの画面出力もしてしまい使用メモリの無駄です。


設定 > RasberryPiの設定 > システム > ブートデスクトップからCLIに変更します。するとHDMIへの出力が切れます。

普段はsshでMacから接続し、GUI作業したい時にTightVNCを使うという運用が良さ気な感じです。

環境

  • RasberryPi 3B
  • macOS Catalina 10.15.5
  • TightVNC-1.3.9

参考サイト


  1. 適宜apt-get update、apt-get upgradeを実行してください 

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