この記事ではMacユーザー向けに、Visual Studio Codeのキーボードショートカットの中から特に使用頻度の高いものを紹介していきます。 1. 一般 操作 ショートカット コマンドパレットを開く shift + ⌘ + P クイックオープン ⌘ + P 新規ウィンドウを開く shift + ⌘ + N ウィンドウを閉じる ⌘ + W ユーザー設定を開く ⌘ + , キーボードショートカットを開く ⌘ + K→⌘ + S 2. 基本的な編集 操作 ショートカット 行を下に移動/上に移動 option + ↓ / option + ↑ 行の下にコピー/上にコピー shift + option + ↓ / shift + option + ↑ 行の削除 shift + ⌘ + K 行を下に挿入/上に挿入 ⌘ + Enter / shift + ⌘ + Enter 一致する括弧にジャンプ shift + ⌘ + \ 行のインデント/アウトデント ⌘ + ] / ⌘ + [ コードを折りたたむ/展開する option + ⌘ + [ / option + ⌘ + ] 行コメントの切り替え ⌘ + / 補完機能をトリガー control + space⌘ + I 3. マルチカーソルと選択 操作 ショートカット カーソルの挿入 option + クリック カーソルを下へ挿入/上へ挿入 option + ⌘ + ↓ / option + ⌘ + ↑ 現在の行を選択 ⌘ + L 選択中の文字列と一致する文字列を全て選択 shift + ⌘ + L 矩形選択 shift + option + マウスドラッグshift + option + ⌘ + ↑ / ↓ / ← / → 4. 検索と置換 操作 ショートカット 検索 ⌘ + F 置換 option + ⌘ + F 検索結果の次に移動/前に移動 ⌘ + G / shift + ⌘ + GEnter / shift + Enter マッチした文字列を全て選択 option + Enter 5. ナビゲーション 操作 ショートカット 指定行へ移動 control + G 問題パネルを開く shift + ⌘ + M パネルの表示/非表示切り替え ⌘ + J 6. エディタの管理 操作 ショートカット エディタを閉じる ⌘ + W フォルダを閉じる ⌘ + K → F エディタを垂直分割 ⌘ + \ 7. ファイル管理 操作 ショートカット 新規ファイル ⌘ + N ファイルを開く ⌘ + O 保存 ⌘ + S 閉じたエディタを開く shift + ⌘ + T アクティブなファイルを新しいウィンドウに表示する ⌘ + K → O 最近開いた項目 control + R 8. 表示 操作 ショートカット エディタレイアウトの切り替え(水平/垂直) option + ⌘ + 0 サイドバーの表示/非表示の切り替え ⌘ + B 出力パネルの表示 shift + ⌘ + U Markdownプレビューをサイドに表示 ⌘ + K → V Markdownプレビューを新規ファイルとして表示 shift + ⌘ + V ターミナルを表示する control + ` 新しいターミナルを作成する control + shift + ` 9. その他 9-1. ユーザが作成したショートカットキーのみを表示する方法 キーボードショートカットエディターの検索欄に@source:userを入力する ...
【Ruby】Sinatraでメモアプリを作る(JSONファイル編)
この記事では、RubyのWebアプリケーションフレームワークであるSinatraを使って、シンプルなメモアプリを作成します。 データの保存先にはDBを使わず、JSONファイルを使用します。 1. 実行環境 macOS:12.5 Ruby:3.1.0 Bundler:2.3.12 sinatra:2.2.2 webrick:1.7.0 sinatra-contrib:2.2.2 2. メモアプリの要件 以下のメモアプリを作成します。 機能 メモの作成 メモの編集 メモの削除 メモ一覧の表示 特定のメモの表示 3. 作成手順 以下の手順で進めていきます。 設計 実装 改良 3-1. 設計 まずはアプリケーションの設計を行います。 3-1-1. URI設計 RESTfulなURI設計として、今回は以下のURIを使用します。 Method Path Description GET /memos メモ一覧を表示 GET /memos/new メモ作成画面を表示 GET /memos/{memo_id}/edit メモ編集画面を表示 POST /memos メモを作成 GET /memos/{memo_id} 特定のメモを表示 PATCH /memos/{memo_id} 特定のメモを編集 DELETE /memos/{memo_id} 特定のメモを削除 3-1-2. ディレクトリ設計 ディレクトリ構成は以下のようになります。 memo-app/ - public/ - memos.json # データ保存先 - views/ - edit.erb # メモ編集画面 - index.erb # メモ一覧表示画面 - layout.erb # 各ビューの共通部分 - new.erb # メモ作成画面 - show.erb # 特定のメモ表示画面 - memo.rb # ルーティング定義 3-2. 実装 次にメインの機能の実装を行います。 ...
【Ruby3.1】lsコマンドを作る
この記事では、RubyでLinuxのlsコマンドを実装する方法を解説します。 gemを使わずにRubyの標準ライブラリのみで実装します。 OOP版はこちら↓ 【Ruby3.1】lsコマンドを作る(OOP版) - あまブログ 1. 実行環境 macOS:12.5 Ruby:3.1.0 2. 作成するlsコマンドの要件 今回はlsコマンドの以下の機能を実装の対象とします。 オプションなしのlsコマンド 横に最大3列を維持して表示 ファイルの並び順は列ごとに辞書式順序にソートされる -aオプション -rオプション -lオプション ファイルの並び順 # OK 0 4 8 1 5 9 2 6 3 7 # NG 0 1 2 3 4 5 6 7 8 9 以下の機能は実装の対象外とします。 引数にファイルやディレクトリを指定可能にする mac拡張属性(@マーク)の表示 3. lsコマンドの仕様 macOS標準のlsコマンドの仕様は以下の通りです。(ソースコードはこちら) (今回の要件に必要な箇所のみ) 引数なし カレントディレクトリの内容を表示 -aオプション ファイル名が.で始まるファイルを含めて表示 -lオプション ディレクトリ内の各ファイルのブロック数の合計を1行目に表示(total <blocks>) 2行目以降に各ファイルをロングフォーマットで表示 -rオプション 逆順で表示 3-1. ロングフォーマットについて -lオプション指定時に表示される以下のような形式をロングフォーマットと呼びます。 dr-xr-xr-x 3 root wheel 4539 7 30 07:10 dev ロングフォーマットに含まれるファイルの情報(属性)は以下の7つです。 ファイルタイプとファイルモード ハードリンク数 所有者名 グループ名 ファイルサイズ タイムスタンプ ファイル名 3-1-1. ファイルタイプとファイルモード ファイルタイプとファイルモードを10桁のアルファベットで表示(drwxr-xr-x) 1桁目:ファイルタイプ 2桁目~10桁目:ファイルモード File::Stat#ftypeでファイルタイプを取得 File::Stat#modeでファイルモードを取得 lsコマンドの-lオプションで表示されるファイルタイプとファイルモードの詳細については以下の記事を参照ください。 ...
【Ruby】File::Stat#modeが返すファイルモードの数値を記号表記に変換する
この記事では、RubyのFile::Stat#modeが返すファイルモードの数値と、記号表記(symbolic notation)の対応を解説します。 ファイルモードの記号表記については以下の記事を参照ください。 【ls -l】ファイルタイプとファイルモードの記号の意味 | あまブログ 1. File::Stat#modeが返す値 fs = File::Stat.new('sample.txt') p fs.mode #=> 33188 p fs.mode.to_s(8) #=> "100644" File::Stat#modeはファイルモードを10進数の数値で返します。(33188) これを意味のわかるものにするためには、8進表記の文字列に変換する必要があります。("100644") 2. 8進表記と記号表記の対応 ここからは8進表記の文字列と記号表記の対応を解説していきます。 先ほど出てきた100644を記号表記に変換すると以下のようになります。 8進表記 記号表記 100644 -rw-r--r-- この6桁の8進表記はそれぞれの桁ごとに以下の意味を持ちます。 1~2桁目:ファイルタイプ 3桁目:特殊権限 4桁目:所有者の権限 5桁目:グループの権限 6桁目:その他のユーザの権限 以降で8進表記の各桁と記号表記の対応について詳しく解説していきます。 1~2桁目:ファイルタイプ File::Stat#modeが返す6桁の8進表記の1~2桁目はファイルタイプを表します。 ファイルタイプの8進表記と記号表記の対応は以下のようになります。 8進表記 記号表記 ファイルタイプ 01 p 名前付きパイプ(FIFO) 02 c キャラクタデバイス(Character special file) 04 d ディレクトリ(Directory) 06 b ブロックデバイス(Block special file) 10 - 通常ファイル(Regular file) 12 l シンボリックリンク(Symbolic link) 14 s ソケット(Socket link) 3桁目:特殊権限 File::Stat#modeが返す6桁の8進表記の3桁目は特殊権限を表します。 ...
【ls -l】ファイルタイプとファイルモードの記号の意味
この記事ではLinuxのlsコマンドの-lオプションで表示されるファイルタイプとファイルモードの記号の意味を解説します。 ls -lコマンドを実行すると、以下のようなファイルの詳細情報が表示されます。 $ ls -l -rw-r--r-- 1 uname staff 0 11 28 12:31 default.txt drwxr-xr-x 2 uname staff 64 11 28 11:55 default_dir 各行の先頭に表示される-rw-r--r--やdrwxr-xr-xのような10桁の記号は、そのファイルのファイルタイプとファイルモードを表します。 1桁目:ファイルタイプ 2桁目~10桁目:ファイルモード 以降では、ファイルタイプとファイルモードの記号の意味を解説していきます。 1. ファイルタイプ ls -lで表示される10桁の記号のうち1桁目はファイルタイプを表します。 ファイルタイプを表す記号の種類は以下の7つです。 記号 ファイルタイプ b ブロックデバイス(Block special file) c キャラクタデバイス(Character special file) d ディレクトリ(Directory) l シンボリックリンク(Symbolic link) s ソケット(Socket link) p 名前付きパイプ(FIFO) - 通常ファイル(Regular file) 2. ファイルモード ls -lで表示される10桁の記号のうち2桁目~10桁目はファイルモードを表します。 このファイルモードは以下の3文字×3組で表されます。 3文字(権限なし:-) r:読み込み w:書き込み x:実行 3組 所有者(owner) グループ(group) その他のユーザ(other) 例えばファイルモードがrwxr-xr-xの場合、所有者は読み込み・書き込み・実行の全てを許可(rwx)、グループは読み込み・実行を許可(r-x)、その他のユーザも読み込み・実行を許可(r-x)という意味になります。 2-1. 特殊権限(スティッキービット、SGID、SUID) ファイルモードを表す記号には前述のr,w,x,-以外に、特殊権限を表す記号があります。 ...
RubyでJSONファイルを扱う方法
この記事ではJSONの基礎と、RubyでJSONファイルを扱う方法を紹介します。 1. JSONの基礎 1-1. JSON(JavaScript Object Notation)とは データ記述言語の1つ プログラミング言語を問わず利用することができる(JavaScript, Java, PHP, Ruby, Python など) 名称と構文はJavaScriptにおけるオブジェクトの表記法に由来する MIEMタイプはapplication/json 拡張子はjson 文字コードはUTF-8でエンコードすることが必須 ウェブアプリケーションでデータを転送する場合によく使われる 1-2. JSONの表記方法 JSONのデータ型 JSONは以下のデータ型で構成されます。 文字列(string) 数値(number) 真偽値(boolean) ヌル値(null) オブジェクト(object) 配列(array) 1. 文字列(string) {"name":"John"} ダブルクォーテーションで囲んだ文字列を指定(シングルクォーテーションは使えない) バックスラッシュでエスケープしたUnicode文字で構成される 2. 数値(number) { "number_1" : 210, "number_2" : 215, "number_3" : 21.05, "number_4" : 10.05 } 10進法表記のみ(8進、16進法表記は使えない) 浮動小数点数も使用できる 3. 真偽値(boolean) { "active_flag": true, "delete_flag": false } true とfalseはすべて小文字で指定 4. ヌル値(null) {"middlename":null} nullはすべて小文字で指定 5. オブジェクト(object) { "employee":{ "name":"John", "age":30, "city":"New York" } } キーとして使うデータ型は文字列に限る JavaScriptにおける連想配列、Rubyにおけるハッシュ 6. 配列(array) [ { "name":"John", "age":30 }, { "name":"Carol", "age":21 } ] 配列要素には、文字列、数値、真偽値、ヌル値、オブジェクト、配列すべてを使用できる 2. RubyでJSONファイルを扱う方法 2-1. JSONファイルを読み込んでRubyオブジェクトに変換する File.open JSON.#load array.json ...
【Ruby】JSON.parseエラー対処【no implicit conversion of File into String (TypeError)】
1. バージョン情報 Ruby:3.1.0 robocop:1.32.0 2. 経緯 以下のような、JSONファイルを読み込むコードを書いていた。 require 'json' file_path = "test.json" p File.open(file_path) { |f| JSON.load(f) } #=> ファイルの内容 これをrubocopでチェックすると以下の警告文が表示された。 Security/JSONLoad: Prefer JSON.parse over JSON.load. JSON.load()ではなくJSON.parse()を使えと言っている。 以下のようにJSON.parse()を使うように修正したところエラーが発生した。 require 'json' file_path = "test.json" p File.open(file_path) { |f| JSON.parse(f) } #=> no implicit conversion of File into String (TypeError) 3. エラー対処法 JSON.parse()は引数に文字列を指定する必要があり、引数にファイルは指定できない。 なので、先ほどのコードを以下のように修正すると上手くいく。 require 'json' file_path = "test.json" p File.open(file_path) { |f| JSON.parse(f.read) } #=> ファイルの内容 Fileクラス IO#read 【参考】 RubyDoc.info: Class: RuboCop::Cop::Security::JSONLoad – Documentation for rubocop (0.46.0) – RubyDoc.info ruby - No implicit conversion of file into string - Stack Overflow
【REST】TwitterのURLを再設計する
この記事ではRESTの考え方を理解するために、TwitterのURLをRESTの設計原則に従って再設計します。 1. 対象の機能 今回はTwitterの以下の機能を再設計の対象とします。 ユーザを表示する ツイートする ツイートに返信する 引用ツイートをする リツイートする フォローする フォロー一覧を表示する フォロワー一覧を表示する リストを作成する リストにユーザを追加する リストからユーザを削除する リスト一覧を表示する リストを表示する 2. URL設計 Method Path Description GET users/{user_id} 特定のユーザを表示 POST tweets ツイートを作成する(返信、引用ツイート含む) POST retweets 特定のツイートをリツイートする POST followings 特定のユーザをフォローする GET followings ログイン中のユーザのフォロー一覧を表示 GET followers ログイン中のユーザのフォロワー一覧を表示 GET users/{user_id}/followings 特定のユーザのフォロー一覧を表示 GET users/{user_id}/followers 特定のユーザのフォロワー一覧を表示 POST lists リストを作成する POST lists/{list_id}/members 特定のリストに特定のユーザを追加する DELETE lists/{list_id}/members/{user_id} 特定のリストから特定のユーザを削除する GET lists ログイン中のユーザのリスト一覧を表示 GET users/{user_id}/lists 特定のユーザのリスト一覧を表示 GET lists/{list_id} 特定のリストを表示 3. 解説 3-1. ツイートする(返信・引用ツイート含む) Method Path Description POST tweets ツイートを作成する(返信、引用ツイート含む) ツイートをするのは常にログインユーザのため、URIにログインユーザのidは含めない 返信の場合、リクエストのボディに返信先のツイートの情報を含める 引用ツイートの場合、リクエストのボディに引用するツイートのidを含める 3-2. リツイートする Method Path Description POST retweets 特定のツイートをリツイートする リツイートをするのは常にログインユーザのため、URIにログインユーザのidは含めない リクエストのボディにリツイートするツイートのidを含める 3-3. フォローする Method Path Description POST followings 特定のユーザをフォローする フォローを実行するのは常にログインユーザのため、URIにログインユーザのidは含めない リクエストのボディにフォローするユーザのidを含める 3-4. リストにユーザを追加する Method Path Description POST lists/{list_id}/members 特定のリストに特定のユーザを追加する リストへのユーザ追加を実行するのは常にログインユーザのため、URIにログインユーザのidは含めない リクエストのボディにリストに追加するユーザのidを含める 3-5. リストを表示する Method Path Description GET lists/{list_id} 特定のリストを表示 リストを一意に特定できれば、そこからリストを所有するユーザはわかるため、users/{user_id}/lists/{list_id}とする必要はない 【参考】 ...
【Git】特定のコミットを修正する方法【rebase -i】
1. はじめに 本稿では、git rebase -iを使った特定のコミットの修正方法を解説します。 直前のコミットだけではなく、2つ以上前のコミットを修正できる コミットメッセージの修正だけではなく、ファイルの編集内容の修正も可能 チーム開発等で既にpushしているコミットに対しての使用には注意が必要です。 2. 手順 以下の手順で進めていきます。 コミットログの確認 git rebase -i HEAD~n 修正したいコミットの「pick」を「edit」に変更 ファイルの修正 git add git commit –amend git rebase –continue 2-1. コミットログの確認 以下のコマンドを実行して、修正したいコミットを確認します。 git log --oneline a00d4fa (HEAD -> main) file2.txtを修正 091fed5 file2.txtを作成 d4a404b file1.txtを修正 # これを修正したい 6f86174 file1.txtを作成 今回は以下のコミットを修正したいと思います。 d4a404b file1.txtを修正 2-2. git rebase -i HEAD~n git rebase -i HEAD~n コマンドで、デフォルトのテキストエディタに直近のn個のコミットを表示できます。 今回修正したいコミットはHEADを含めて3つ目のコミットなので、以下のコマンドを実行します。 git rebase -i HEAD~3 すると、テキストエディタで以下のように表示されます。 # コミット一覧のファイル pick d4a404b file1.txtを修正 pick 091fed5 file2.txtを作成 pick a00d4fa file2.txtを修正 # Rebase 6f86174..a00d4fa onto 6f86174 (3 commands) # # Commands: # p, pick <commit> = use commit # r, reword <commit> = use commit, but edit the commit message # e, edit <commit> = use commit, but stop for amending # s, squash <commit> = use commit, but meld into previous commit # f, fixup [-C | -c] <commit> = like "squash" but keep only the previous # commit's log message, unless -C is used, in which case # keep only this commit's message; -c is same as -C but # opens the editor # x, exec <command> = run command (the rest of the line) using shell # b, break = stop here (continue rebase later with 'git rebase --continue') # d, drop <commit> = remove commit # l, label <label> = label current HEAD with a name # t, reset <label> = reset HEAD to a label # m, merge [-C <commit> | -c <commit>] <label> [# <oneline>] # . create a merge commit using the original merge commit's # . message (or the oneline, if no original merge commit was # . specified); use -c <commit> to reword the commit message # # These lines can be re-ordered; they are executed from top to bottom. # # If you remove a line here THAT COMMIT WILL BE LOST. # # However, if you remove everything, the rebase will be aborted. # 2-3. 修正したいコミットの「pick」を「edit」に変更 d4a404bのコミットをpickからeditに変更します。 ...
【MacBook】USキーボードで簡単に「英字⇄かな」切替する方法
USキーボードのMacBookを買ったけど、日本語入力への変換がめんどくさい! 「英字⇄かな」切替をもっと簡単にする方法はないかな? 本記事の内容 USキーボードのMacBookで「英字⇄かな」切替を簡単に行う方法 今回は、USキーボードのMacBookで「英字⇄かな」切替を簡単に行う方法を紹介します。 MacBookは見た目がカッコいいUSキーボードを選びました。 徐々にUSキーボードに慣れてきた中で、唯一解決しない問題が「英字⇄かな」切替がめんどくさいことです。 何故なら、USキーボードには「全角/半角」切替ボタンがありません。 さらにMacBookのデフォルトでは「英字⇄かな」切替のショートカットキーが「Control + スペースキー」 に割り当てられています。 そしてこの「Control + スペースキー」がめちゃくちゃ打ちづらい! そこで今回は、そんな問題を解決するオススメの方法を2つ紹介します。 方法1.「Command + スペースキー」で切り替える こちらの方法は、やることはシンプルで、デフォルトのショートカットキーである「Control + スペースキー」を「Command + スペースキー」に変えるだけです。 「Command」と「スペースキー」が隣り合っているので、とても簡単に「英字⇄かな」切替ができます。 手順1.「システム環境設定」から「キーボード」を選択 まず最初にDockの「システム環境設定」を開き、「キーボード」を選択します。 手順2.「ショートカット」タブの「入力ソース」を選択 次に「ショートカット」タブをクリックし、左側のリストから「入力ソース」を選択します。 手順3.「前の入力ソースを選択」をクリックしてから新しいキーを設定 次に、「前の入力ソースを選択」をクリックし、「Command + スペースキー」を直接入力します。 黄色い三角マークが出た場合 下の画像のように、「Command + スペースキー」設定後に黄色い三角マークが出た場合はもう少し設定をする必要があります。 この黄色い三角マークは、先ほど設定した「Command + スペースキー」が既に別のアクション(デフォルトでは「Spotlight検索」)のショートカットキーとして割り当てられていることを意味します。 なので既に「Command + スペースキー」が割り当てられていた「Spotlight検索」のショートカットキーを変更することでこの問題は解決します。 手順3と同じように、今度は「Spotlight」→「Spotlight検索を表示」を選択して、「Control + スペースキー」を入力します。 「Control + スペースキー」がちゃんと設定されると以下のように黄色い三角マークは消えます。 以上で設定完了です! 方法2.「caps lock」で切り替える 2つ目方法では、「caps lock」ボタンで「英字⇄かな」切り替えを行えるようにします。 手順1.「システム環境設定」から「キーボード」を選択 まず最初にDockの「システム環境設定」を開き、「キーボード」を選択します。 手順2.「入力ソース」タブを選択し、「Caps Lockキーで英字入力モードと切り替える」をチェック 次に「入力ソース」タブを選択し、「Caps Lockキーで英字入力モードと切り替える」にチェックを入れます。 ...