2025/1/28 学習記録

# 現状：
エンジニアへの未経験転職。
就職先も決まり、2月からひよこエンジニアに。

2025年は頑張ろうということで、2025年学習記録19日目。

内容は常に書き散らしのメモです、あしからず。

当面の目標：LPIC101,102合格

# javascript

## オブジェクトリテラル

JavaScriptでオブジェクトを直接定義するための記法。
クラス定義なしでインラインでオブジェクトを作成できる。

### 特徴

1. 中括弧 {} を使用してオブジェクトを作成します[1][2]。
2. キーと値のペアを直接記述することで、オブジェクトのプロパティとメソッドを定義します[1][2]。
3. JavaScriptでオブジェクトを作成する最も一般的で簡潔な方法の1つです[1][3]。

### 使用例

```jsx
const person = {
  name: 'Taro',
  age: 30,
  greet: function() {
    console.log("Hello, my name is " + this.name);
  }
};
```

この例では、`person`オブジェクトに`name`と`age`というプロパティ、そして`greet`というメソッドを定義しています[1][2]。

JSONはJavaScriptのオブジェクトリテラルに由来しており、JavaScriptではJSONをそのままオブジェクトリテラルとして解釈できます[3]。

### Citations:

[1] https://programming-tango.jp/vocabulary/2093/
[2] https://teach.web-represent.link/about-objects-and-object-literals/
[3] https://typescriptbook.jp/reference/values-types-variables/object/object-literal
[4] https://qiita.com/micropig3402/items/a31c2405a4a32d43bb24
[5] https://qiita.com/shimajiri/items/77407b7db6c17218f3c1
[6] https://uhyohyo.net/javascript/16_8.html
[7] https://magazine.techacademy.jp/magazine/36682
[8] http://ajaxtower.s26.xrea.com/js/object/index2.html
[9] https://jsprimer.net/basic/object/

## スプレッド演算子（`...`）

配列やオブジェクトの要素を展開するために使用される構文。

### 特徴

構文: `...` （3つのドット）を使用します[1][3]。

### 使用方法

1. 主な用途:
    - 配列の連結: `const concatenatedArr = [...arr1, ...arr2];`[3]
    - オブジェクトの結合: `const mergedObj = { ...obj1, ...obj2 };`[3]
    - 関数の引数に配列を展開: `foo(...args);`[1]
    - 配列やオブジェクトのシャローコピー作成: `const clonedObj = { ...obj1 };`[3]
2. 分割代入との組み合わせ:
    
    ```jsx
    const [x, y, ...remaining] = [1, 2, 3, 4];
    console.log(x, y, remaining); // 1, 2, [3,4]
    
    ```
    
3. 文字列の展開:
    
    ```jsx
    const str = "Hello";
    const charArray = [...str]; // ['H', 'e', 'l', 'l', 'o']
    
    ```
    

### Citations:

[1] https://typescript-jp.gitbook.io/deep-dive/future-javascript/spread-operator
[2] https://qiita.com/Nossa/items/e6f503cbb95c8e6967f8
[3] https://kinsta.com/jp/knowledgebase/spread-operator-javascript/
[4] https://zenn.dev/airiswim/articles/384c5b5bb089ba
[5] https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Spread_syntax
[6] https://ns-adwork.com/javascript/3608/
[7] https://qiita.com/akisx/items/682a4283c13fe336c547
[8] https://fuuno.net/nani/nani03/nani03.html



## `Reflect.getOwnPropertyDescriptor()`メソッド

JavaScriptの`Reflect`オブジェクトに属するメソッド。
指定したオブジェクト内のプロパティの**プロパティ記述子**を取得する。

### **構文**

```jsx
Reflect.getOwnPropertyDescriptor(target, propertyKey)
```

- **target**: プロパティを探す対象のオブジェクト（必須）。
- **propertyKey**: プロパティ名（文字列またはシンボル）。

### **返り値**

- プロパティが存在する場合、そのプロパティの記述子オブジェクトを返します。
- 存在しない場合は`undefined`を返します。

### **使用例**

```jsx
const obj = { x: 42 };

console.log(Reflect.getOwnPropertyDescriptor(obj, "x"));
// { value: 42, writable: true, enumerable: true, configurable: true }

console.log(Reflect.getOwnPropertyDescriptor(obj, "y"));
// undefined

console.log(Reflect.getOwnPropertyDescriptor([], "length"));
// { value: 0, writable: true, enumerable: false, configurable: false }

```

### **用途**

1. **プロパティの詳細確認**:
    - プロパティが書き換え可能か（`writable`）
    `writable` : 値の書き換えが許可されているかどうか
    - 列挙可能か（`enumerable`）
    `enumerable` : `for in`ループで列挙対象になるかどうか
    - 削除や再定義が可能か（`configurable`）などを確認できます
    `configurable` : 設定を変更できるかどうか
    - （`true` or `false`）で表される。
    
    ```bash
    # 例
    configurable:false
    enumerable:true
    writable:false
    ```
    
2. **Proxyやカスタム操作**:
    - `Proxy`と組み合わせて、プロパティ操作の挙動をカスタマイズする際に使用されます[1][5][7].

### **`Object.getOwnPropertyDescriptor()`との違い**

**非オブジェクト**を対象とした場合

- `Reflect.getOwnPropertyDescriptor()`：`TypeError`をスローします。
- `Object.getOwnPropertyDescriptor()`：非オブジェクトをオブジェクトに変換して処理します[1][5].

```jsx
// Reflectではエラー
Reflect.getOwnPropertyDescriptor("hello", 0);
// TypeError: "hello" is not a non-null object

// Objectではプリミティブをオブジェクトに変換
Object.getOwnPropertyDescriptor("hello", 0);
// { value: "h", writable: false, enumerable: true, configurable: false }
```

### Citations:

[1] https://jsref.affi-sapo-sv.com/jsref/reflect_getownpropertydescriptor
[2] https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor
[3] https://ja.wikibooks.org/wiki/JavaScript/Reflect
[4] https://qiita.com/mayasy_RPA/items/df2f0e8d627f8bf3acb9
[5] https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Reflect/getOwnPropertyDescriptor
[6] https://www.mitsue.co.jp/knowledge/blog/frontend/202002/28_1056.html
[7] https://hidekazu-blog.com/javascript-reflect/
[8] https://zenn.dev/qnighy/articles/5562746d52712f



# Linux

## `file`コマンド

ファイルの種類や形式を識別するLinuxのコマンド。
ファイルを読み取り、一連のテストを行って、タイプを判別し、結果を標準出力に表示する。

### 特徴

1. ファイルシステムテスト、マジックナンバーテスト、言語テストの3つのテストを順に行い、ファイルの種類を特定します[2]。
2. 拡張子に関係なく、ファイルの内容を解析してタイプを判別します[2][3]。
3. テキストファイル、画像ファイル、実行ファイル、ディレクトリなど、様々な種類のファイルを識別できます[1][2][3]。
4. ファイルの文字コード、画像の形式やサイズ、実行ファイルのアーキテクチャなどの詳細情報も表示します[2][3]。
5. 圧縮ファイルの場合、-zオプションを使用することで圧縮前のファイル種類も表示できます[2]。

### オプション一覧

| オプション | 説明 |
| --- | --- |
| --help | ヘルプメッセージを表示し、終了します[1] |
| -v, --version | バージョン情報を表示し、終了します[1] |
| -m, --magic-file LIST | マジックナンバーファイルのリストを使用します[1] |
| -z, --uncompress | 圧縮ファイルの内容も解析します[1][8] |
| -Z, --uncompress-noreport | 圧縮ファイルの内容のみを表示し、圧縮ファイル自体の情報は表示しません[1] |
| -b, --brief | 出力からファイル名を省略し、ファイルタイプのみを表示します[1][5] |
| -c, --checking-printout | マジックファイルの解析結果を表示し、新しいマジックファイルのデバッグに使用します[1] |
| -e, --exclude TEST | 指定したテストを除外してファイルを解析します[1] |
| --exclude-quiet TEST | 指定したテストを除外し、未知のテストは無視します[1] |
| -f, --files-from FILE | 指定したファイルから解析するファイル名を読み込みます[1][2][3] |
| -F, --separator STRING | 出力時のファイル名と結果の区切り文字を指定します[1] |
| -i, --mime | MIMEタイプとエンコーディングを表示します[1][5] |
| --apple | AppleのCREATOR/TYPE情報を表示します[1] |
| --extension | 推定されるファイル拡張子をスラッシュで区切って表示します[1] |
| --mime-type | MIMEタイプのみを表示します[1] |
| --mime-encoding | MIMEエンコーディングのみを表示します[1] |
| -k, --keep-going | 最初の一致で停止せず、すべてのテストを実行します[1] |
| -l, --list | マジックの強度を一覧表示します[1] |
| -L, --dereference | シンボリックリンクを辿り、リンク先のファイルを解析します[1][8] |
| -h, --no-dereference | シンボリックリンクを辿らず、リンク自体を解析します[1] |
| -n, --no-buffer | 出力をバッファリングせずに表示します[1] |
| -N, --no-pad | 出力の整列のための空白を追加しません[1] |
| -0, --print0 | ファイル名の後にASCII NUL文字を追加します[1] |
| -p, --preserve-date | ファイルのアクセス日時を保持します[1] |
| -P, --parameter | ファイル解析エンジンのパラメータ制限を設定します[1] |
| -r, --raw | 印字不能な文字をエスケープせず、そのまま表示します[1] |
| -s, --special-files | 特殊ファイル（ブロックデバイスやキャラクタデバイス）も通常のファイルとして扱います[1][4] |
| -S, --no-sandbox | システムコールのサンドボックスを無効にします[1] |
| -C, --compile | 指定したマジックファイルをコンパイルします[1] |
| -d, --debug | デバッグメッセージを表示します[1] |
| -d | 任意のデフォルトのシステム・テストをファイルに適用します[3] |

fileコマンドは、見慣れないファイルの内容を確認する前に使用することで、バイナリファイルを誤って開いてしまうリスクを軽減できる。

### Citations:

[1] https://www.ibm.com/docs/ja/aix/7.2?topic=f-file-command
[2] https://uxmilk.jp/53517
[3] https://qiita.com/shinnshinn/items/e11dc2bf0c2368fdc38e
[4] https://docs.oracle.com/cd/E19205-01/820-1199/blayp/index.html
[5] https://blog.future.ad.jp/cmd_file
[6] https://www.ibm.com/docs/ja/aix/7.2?topic=files-displaying-file-type-file-command
[7] http://me.autodesk.jp/wam/maya/docs/Maya2010/Commands/file.html



## `gzip`コマンド

UNIX系で使用されるファイル圧縮・解凍ツール。
Lempel-Ziv（LZ77）アルゴリズムとハフマン符号化を用いてファイルを効率的に圧縮する。

### 特徴

1. ファイル圧縮: 指定したファイルを圧縮し、通常は元のファイル名に「.gz」拡張子を付けて保存します[1][4]。
2. ファイル解凍: 圧縮されたファイルを元の状態に戻すことができます[1][5]。
3. ディスクスペースの節約: ファイルサイズを減らすことで、ストレージ容量を節約します[3]。
4. データ転送時間の短縮: 圧縮されたファイルは転送時間が短縮されます[3]。
5. 元ファイルの扱い: デフォルトでは圧縮後に元のファイルは削除されますが、オプションを使用して保持することも可能です[1][3]。
6. ディレクトリ圧縮: -rオプションを使用することで、ディレクトリ内のファイルを再帰的に圧縮できます[1][3]。

### オプション一覧

| オプション | 長いオプション | 説明 |
| --- | --- | --- |
| -1 ~ -9 | --fast (1), --best (9) | 圧縮レベル（1が低圧縮率で高速、9が高圧縮率で低速） |
| -c | --stdout, --to-stdout | 結果を標準出力へ出力 |
| -d | --decompress, --uncompress | 圧縮ファイルを展開 |
| -f | --force | 既存のファイルを上書き |
| -k | --keep | 圧縮・解凍後に元ファイルを削除しない |
| -l | --list | 圧縮ファイルの情報を表示 |
| -N | --name | 元のファイル名とタイムスタンプを保持 |
| -n | --no-name | 元のファイル名とタイムスタンプを保持しない |
| -q | --quiet | 警告メッセージを抑制 |
| -r | --recursive | ディレクトリを再帰的に処理 |
| -S SUFFIX | --suffix=SUFFIX | 出力ファイルの拡張子を指定 |
| -t | --test | 圧縮ファイルの整合性をテスト |
| -v | --verbose | 詳細な情報を表示 |
| -- | --help | ヘルプメッセージを表示 |
| -- | --version | バージョン情報を表示 |
| -L | -- | ライセンス情報を表示 |
| -V | -- | バージョン情報を表示 |

`tar`コマンドと組み合わせることで、複数のファイルやディレクトリをまとめて圧縮できる。

### Citations:

[1] https://marusuke-blog.com/linux-gzip-command/
[2] https://kanda-it-school-kensyu.com/linux-basic1-contents/linux-basic1_05/linux-basic1_0504/
[3] https://pawsole.com/gzip/
[4] https://www.koikikukan.com/archives/2012/06/01-235555.php
[5] https://www.infra-linux.com/menu-linux3/gzip/
[6] https://wa3.i-3-i.info/word11247.html
[7] https://atmarkit.itmedia.co.jp/ait/articles/1608/09/news018.html
[8] https://qiita.com/sympe/items/13819ebe57a46090f064






















---
### 今日はここまで！