この記事では、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キーで英字入力モードと切り替える」にチェックを入れます。 ...
【未経験・独学】基本情報技術者試験の勉強時間はどれくらい必要?
本記事の内容 IT業界未経験から合格までに必要な勉強時間 勉強のスケジュール 勉強内容 オススメの参考書 今回はIT業界未経験から独学で基本情報技術者試験に合格するための方法を解説します。 この記事を書いている僕は、平成30年度秋期 基本情報技術者試験に合格しました。 これから基本情報技術者試験の勉強を始める方は、ぜひこの記事を読んでみてください! 1. IT業界未経験でも3ヶ月の勉強期間で合格できる IT業界未経験の方でも、3ヶ月で180時間の勉強で合格できます。 1-1. 当時の自分のレベル 社会人1年目の10月に受験しました。 学生時代にパソコンに触れる機会は、Wordでレポートを提出するときくらいでした。 試験勉強を始める前にやっていたことといえば、社内研修で1ヶ月間C言語を教わったことくらいです。 基本情報技術者試験に合格すれば会社から資格取得手当が貰えたし、何かしらの勉強はしたかったので、存在を知った瞬間から受験する気はありました。 ただ流石にまだ合格は無理だろうと思って、1年目の10月は受験しないで次の2年目の4月に受験しようと思っていました。 7月くらいに現場の先輩から「基本情報受けるの?」と聞かれ、まだ無理だと思うから今回は受けないと答えると、「いやいや今からでも全然行けるっしょ」と受験する気がないことに結構驚かれました。 そしたらなんか僕も「え、マジっすか、いけんすか。」ってなって、「いけんのかぁ、じゃ受けてみようかなぁ」って感じで受けたら、いけました。 このような感じで僕のような素人でも3ヶ月の勉強で合格できたので、受験しようか迷ってる方にはぜひ挑戦してほしいです! 1-2. 合格までに必要な勉強時間 IT業界未経験で知識0からのスタートでも、180時間あれば十分に合格レベルまで持っていけます。 期間は余裕を持って3ヶ月くらいあるといいです。 毎日2時間×90日=180時間が理想ですが、仕事がある人は平日1時間、土日に5時間ずつで週15時間×12週間=180時間くらいのペースでもいいです。 180時間の配分はざっくり以下を目指しましょう。 午前対策 80時間 午後対策 100時間 2. 勉強のスケジュール ここからは勉強のスケジュールを紹介していきます。 僕の場合は以下のようなスケジュールで勉強しました。 入社した4月に会社から基本情報技術者試験の参考書が支給されていたので、図に示す期間の前から参考書を読んだりしていました。 8/1に午前試験の過去問を1回解いてみたところから本格的な勉強スタートです。 そこから9/16までは午前対策のみを行いました。 9/16から午後対策を始めたので、9/16~9/28までの期間は午前、午後どちらの勉強もしている状態です。 9/28で完全に午前対策をやめて、午後対策のみに集中しました。 本番1週間前の10/13~10/14の二日間で、本番同様に午前・午後を通しで2回分解きました。 ラスト1週間は最後の調整で、午後試験を中心に今までやったことを確認したり、気になるところの過去問を解き直したりしていました。 3. 勉強内容 ここからは実際に行った勉強内容を紹介していきます。 3-1. 午前試験 以下の流れで午前試験の勉強を行いました。 ...
【初心者向け】JavaScriptで簡単なゲームを30分で作ろう!
JavaScript初心者でも簡単に作れるゲームが知りたい! ゲームの作り方の詳しい解説やソースコードも見たい! 本記事の内容 ゲームの完成形とソースコード ゲームの作り方の解説 この記事は、JavaScriptの基礎文法を一通り学んで「実際に何かを作ってみたい!」 という方に向けたものになっています。 ライブラリなどは一切使わず、JavaScriptの基礎文法だけで作れるゲームを紹介します。 今回作るゲームはJavaScript初心者の方でも30分で作ることができます。 実際に手を動かして、JavaScriptの理解を深めていきましょう! 1. 数字当てゲーム 簡単な「数字当てゲーム」を作っていきます。 1-1. 完成形とソースコード 以下が今回作るゲームの完成形です。 1~20までの数字を予想してスコアを競うゲームです。 表示されるヒントを頼りに正解の数字を予想していきます。 より少ない回数で数字を当てると高得点になります。 デモサイトで実際の動きを確認できます。 ソースコードはこちらから確認できます。 1-2. このゲームを作って学べること 今回の「数字当てゲーム」を作って学べることは以下の2つです。 JavaScriptのDOM操作 コードのリファクタリング 1-3. 用意するもの 以下の3つのファイルを用意しましょう。 index.html style.css script.js これらのファイルはこちらにあります。 2. まずはゲームの仕様を理解しよう コードを書く前に、まずはゲームの仕様を理解しましょう。 2-1. 仕様の確認 今回の「数字当てゲーム」は大きく3つの機能に分けることができます。 メイン機能 ユーザーが数字を入力してチェックボタンをクリックすると処理を実行 入力された値によって異なるメッセージを表示 入力された数字が不正解の場合、スコアを1減らしてゲーム続行 入力された数字が正解の場合、正解の数字を表示してゲーム終了 リセット機能 リセットボタンをクリックしてゲームを再スタート ハイスコア機能 ハイスコアを表示する 2-2. 必要な要素の確認 必要な要素は以下の7つです。 正解の数字(secretNumber) 入力された数字(inputNumber) スコア(score) メッセージ(message) チェックボタン(check) リセットボタン(reset) ハイスコア(highscore) 1. 正解の数字(secretNumber) 変数secretNumberに1~20までのランダムな数字を設定します。 正解した時にこの数字を表示させます。 2. 入力された数字(inputNumber) 変数inputNumberにユーザーにより入力された数字を代入します。 この値をもとに条件分岐を行います。 ...
【VSCode】オススメ拡張機能まとめ
この記事では、Visual Studio Codeのオススメの拡張機能を紹介していきます。(随時更新中) 1. 一般 Code Spell Checker Japanese Language Pack for Visual Studio Code Material Icon Theme Project Manager 2. HTML HTML CSS Support HTMLHint こちらのHTMLHintに移行推奨 Live Server Auto Complete Tag VSCodeの基本設定だけで代替可能(詳細) open in browser Live Serverがあればほぼいらない、<script type="module">で書いたJSファイルを読み込んでるhtmlファイルはfile:// プロトコル経由で開いても動作しない 3. Ruby Ruby LSP VSCode rdbg Ruby Debugger 3-1. Rails Slim slim使う場合はあったほうがいい 4. JavaScript ESLint Prettier JavaScript (ES6) code snippets IntelliCode Formatting Toggle 4-1. Vue.js Volar Vue3からはVolar、Vue2ならVetur 5. PostgreSQL PostgreSQL 6. Git Git History GitLens 7. Docker Docker 【参考】 ...