OmniAICreator/Qiita-1.07M huggingface dataset:
【3日目】10の知識エリアとは？【PMBOKを1日10分、半年で！】

# ✅【3日目】10の知識エリアとは？

このドキュメントでは、PMBOKで定義されている「10の知識エリア」について解説します。これらはプロジェクトのあらゆる場面で使われる、いわば“管理すべき領域の一覧”です。

## 📚 知識エリア＝「何を管理するか」の分類

| No. | 知識エリア（日本語）        | 英語名称                        | 説明（かんたん）                                  |
|-----|-----------------------------|----------------------------------|--------------------------------------------------|
| ①  | 統合マネジメント           | Integration Management          | プロジェクト全体の調整・まとめ役                   |
| ②  | スコープ・マネジメント     | Scope Management                | 作業の範囲を決める／増えすぎないようにする         |
| ③  | スケジュール・マネジメント | Schedule Management             | スケジュールを立てて、進捗を管理する               |
| ④  | コスト・マネジメント       | Cost Management                 | 予算を決めて、コストをコントロールする             |
| ⑤  | 品質マネジメント           | Quality Management              | 品質の基準を守る／満足してもらえる成果をつくる     |
| ⑥  | 資源マネジメント           | Resource Management             | 人・物・設備などのリソースを割り当て、管理する     |
| ⑦  | コミュニケーション         | Communication Management        | 情報を正しく伝える／関係者と円滑にやり取りする     |
| ⑧  | リスク・マネジメント       | Risk Management                 | リスクを予測して、対応策を用意する                 |
| ⑨  | 調達マネジメント           | Procurement Management          | 外部業者との契約や発注を管理する                   |
| ⑩  | ステークホルダー管理       | Stakeholder Management          | 関係者との関係を築き、期待値をマネジメントする     |

## 🔍 知識エリアとプロセス群の関係

昨日学んだ「プロセス群（立上げ・計画・実行・監視・終結）」と、今日の「知識エリア」は、**クロス表のように組み合わさる**。

例：
- スケジュール・マネジメント × 計画 → スケジュールを立てる
- リスク・マネジメント × 監視 → 新しいリスクが出ていないかチェックする

つまり、
- **プロセス群は「時間の流れ」**
- **知識エリアは「分野の分類」**

このように、PMBOKは**時間×分野のマトリクス構造**で成り立っている。

## ✅ 今日のまとめ

- 知識エリアとは「プロジェクトで管理すべき分野」のこと
- 全部で10個あり、PMの仕事の範囲をカバーしている
- プロセス群（時間）と知識エリア（分野）の**両軸**で、PMBOKは構成されている

## 🔜 次回予定

次回は「統合マネジメント（Integration Management）」について、深掘りします。  
プロジェクト全体をまとめあげるPMの“司令塔”的な役割を理解しましょう。
い

Sub CopyQueryTableToPlainSheet()
    Dim srcWs As Worksheet
    Dim destWs As Worksheet
    Dim lo As ListObject
    Dim srcRange As Range
    Dim destStartCell As Range

    ' 1つ目のシートに読み込まれたテーブルがあると仮定
    Set srcWs = ThisWorkbook.Sheets(1)
    Set destWs = ThisWorkbook.Sheets.Add(After:=srcWs)
    destWs.Name = "値だけコピー"

    ' 対象のテーブルを取得
    If srcWs.ListObjects.Count = 0 Then
        MsgBox "テーブル（Power Queryの読み込み結果）が見つかりません。", vbExclamation
        Exit Sub
    End If

    Set lo = srcWs.ListObjects(1)
    Set srcRange = lo.Range
    Set destStartCell = destWs.Range("A1")

    ' 値と書式をコピー
    destStartCell.Resize(srcRange.Rows.Count, srcRange.Columns.Count).Value = srcRange.Value
    destStartCell.Resize(srcRange.Rows.Count, srcRange.Columns.Count).NumberFormat = srcRange.NumberFormat

    ' オプション：読み込み元のテーブルを削除（必要なら）
    ' lo.Delete

    MsgBox "値と書式をコピーしました（" & destWs.Name & "）", vbInformation
End Sub
あ

Sub LoadCSVWithPowerQuery()
    Dim csvPath As String
    Dim queryName As String
    Dim ws As Worksheet
    Dim lo As ListObject

    ' 読み込むCSVファイルのパス（適宜変更）
    csvPath = Application.GetOpenFilename("CSV Files (*.csv), *.csv", , "CSVファイルを選択してください")
    If csvPath = "False" Then Exit Sub ' キャンセル時

    ' クエリ名をファイル名から生成
    queryName = "Query_" & Replace(Replace(Dir(csvPath), ".", "_"), " ", "_")

    ' クエリ追加（Power Query でCSVを読み込み）
    ThisWorkbook.Queries.Add Name:=queryName, Formula:= _
        "let" & vbCrLf & _
        "    Source = Csv.Document(File.Contents(""" & csvPath & """),[Delimiter="","", Columns=999, Encoding=65001, QuoteStyle=QuoteStyle.None])," & vbCrLf & _
        "    PromotedHeaders = Table.PromoteHeaders(Source, [IgnoreErrors=true])" & vbCrLf & _
        "in" & vbCrLf & _
        "    PromotedHeaders"

    ' 新しいシートを作ってクエリを読み込み
    Set ws = ThisWorkbook.Sheets.Add(After:=Sheets(Sheets.Count))
    ws.Name = "元データ"

    ' 読み込んだクエリをワークシートにロード
    With ws.ListObjects.Add(SourceType:=0, Source:= _
        "OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=" & queryName & ";Extended Properties=""""" _
        , Destination:=ws.Range("A1"))
        .Name = "CSVTable"
        .QueryTable.CommandType = xlCmdSql
        .QueryTable.CommandText = Array("SELECT * FROM [" & queryName & "]")
        .QueryTable.Refresh BackgroundQuery:=False
    End With
End Sub
【SwiftUI】TextEditorを、改行数に応じて自動で高さ調整できるようにする

## はじめに
アプリ開発を行なっていく中で、TextEditorの高さを改行数に応じて最大5行まで自動調整させる方法を学んだので、備忘録として内容をまとめます。
この記事では、簡単なサンプルアプリを元に解説します。

## 環境
【Xcode】16.2
【iOS】18.2
【macOS】Sequoia 15.3.1

## サンプルアプリのイメージ
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4004493/26719270-f6da-498f-b5e0-2dbadc66cf70.png" width=45%>

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4004493/8a00d5ff-0ea9-4210-9006-e7e6316a8433.png" width=45%>

- 最初は1行分の高さ
- 改行に応じて最大5行まで広がる
- 6行目以降はスクロール可能

## 1. AutoGrowingTextEditorViewの実装
TextEditorの高さを動的に変更するために、入力中のテキストを行数に分解し、最大5行まで高さを調整する処理を書きます。

```swift
import SwiftUI

struct AutoGrowingTextEditorView: View {
    @Binding var text: String
    @State private var height: CGFloat = 40

    var body: some View {
        TextEditor(text: $text)
            .frame(height: height)
            .background(RoundedRectangle(cornerRadius: 8).stroke(Color.gray.opacity(0.3)))
            .onChange(of: text) {
                adjustHeight()
            }
    }

    private func adjustHeight() {
        let baseHeight: CGFloat = 40   // 1行分の高さ
        let lineHeight: CGFloat = 25   // 改行1回ごとの追加分
        let maxLines: CGFloat = 5
        let lines = min(CGFloat(text.components(separatedBy: .newlines).count), maxLines)
        height = baseHeight + (lines - 1) * lineHeight
    }
}
```

## 2. ContentViewで使ってみる
```swift
import SwiftUI

struct ContentView: View {
    @State private var text = ""

    var body: some View {
        VStack {
            AutoGrowingTextEditorView(text: $text)
                .padding()
            Spacer()
        }
        .padding()
    }
}
```

## まとめ
TextEditorはデフォルトだと1行しか表示されないため、今回の機能を実装することで、複数行入力する場合に高さが自動的に広がって入力しやすいUIになると思います。
チャットアプリやメモアプリなど、ユーザーのテキスト入力がある場面で活用できるかと思います。
DatabricksにおけるSQL書式設定のカスタマイズ

こちらの機能です。

https://docs.databricks.com/aws/ja/sql/user/sql-editor/custom-format

非常にわかりやすい動画を作っていただきました。ありがとうございます！

<iframe width="485" height="862" src="https://www.youtube.com/embed/vSiRIu134EQ" title="#shorts Databricksのカスタム形式のSQL ステートメントを試してみた　#databricks #sqlforbeginners" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

設定ファイル`.dbsql-formatter-config.json`で、SQL書式設定の挙動をカスタマイズできるようになりました。ノートブック、SQLエディタに適用されます。

以下のようにインデントを10にして、ホームフォルダに保存します。

```json:.dbsql-formatter-config.json
{
  "printWidth": 80,
  "indentationStyle": "spaces",
  "indentationWidth": 10,
  "keywordCasing": "uppercase",
  "shouldExpandExpressions": true
}
```

ノートブックで以下のようなSQLを記述します。

```sql
SELECT * FROM takaakiyayoi_catalog.japan_covid_analysis.covid_deaths;
```

**SQLをフォーマット**を選択します。

![Screenshot 2025-05-14 at 9.46.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/01c0dead-af67-4df3-b3c8-0490c2034489.png)

インデントが反映されました。

```sql
SELECT
          *
FROM
          takaakiyayoi_catalog.japan_covid_analysis.covid_deaths;
```

SQLエディタでも確認します。メニューの**編集 > クエリーの書式を設定**を選択します。

![Screenshot 2025-05-14 at 9.48.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/0747a98a-da82-4cfd-b2e0-718ca5f5a16a.png)

こちらも反映されました。

![Screenshot 2025-05-14 at 9.48.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/b3e99249-868b-4ea3-8f49-c7c771c0e20e.png)

この他、キーワードや関数の大文字小文字、コンマの位置、改行などを制御することができます。こちらの[オプション]()をご覧ください。

ご活用ください！

### はじめてのDatabricks

[はじめてのDatabricks](https://qiita.com/taka_yayoi/items/8dc72d083edb879a5e5d)

### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)
op3.c

```c:op3.c
//#include <stdio.h>

#define PRINTX printf("%d\n",x)

// ↓int main()↓ 
main()
{
	int x=2, y, z;

	x *= 3 + 2; PRINTX;
	x *= y = z = 4; PRINTX;
	x = y == z; PRINTX;
	x == ( y = z ); PRINTX;
}
```

```shell:bash
/*
op2.c:6:1: warning: return type defaults to ‘int’ [-Wimplicit-int]
    6 | main()
      | ^~~~
op2.c: In function ‘main’:
op2.c:3:16: warning: implicit declaration of function ‘printf’ [-Wimplicit-function-declaration]
    3 | #define PRINTX printf("%d\n",x)
      |                ^~~~~~
op2.c:10:21: note: in expansion of macro ‘PRINTX’
   10 |         x *= 3 + 2; PRINTX;
      |                     ^~~~~~
op2.c:1:1: note: include ‘<stdio.h>’ or provide a declaration of ‘printf’
  +++ |+#include <stdio.h>
    1 | //#include <stdio.h>
op2.c:3:16: warning: incompatible implicit declaration of built-in function ‘printf’ [-Wbuiltin-declaration-mismatch]
    3 | #define PRINTX printf("%d\n",x)
      |                ^~~~~~
op2.c:10:21: note: in expansion of macro ‘PRINTX’
   10 |         x *= 3 + 2; PRINTX;
      |                     ^~~~~~
op2.c:3:16: note: include ‘<stdio.h>’ or provide a declaration of ‘printf’
    3 | #define PRINTX printf("%d\n",x)
      |                ^~~~~~
op2.c:10:21: note: in expansion of macro ‘PRINTX’
   10 |         x *= 3 + 2; PRINTX;
      |                     ^~~~~~
*/
```
【Git】 git stash について 簡単に説明するよ

## はじめに

開発中に「今の作業を一時的に退避して、別のタスクに取り組みたい」と思ったことはありませんか？
そんな時に便利なのが、Git の`stash`コマンドです。

別のブランチに行きたいからコミットをしてしまうと、履歴が汚れてしまいます。

本記事では、`git stash`の基本的な使い方から、便利なオプションや活用方法までを紹介します。

## stash についてと基本的な使用方法

### 変更を一時保存する

```bash
git stash
```

作業中の変更（ステージ済みと未ステージの両方）を一時的に退避し、作業ディレクトリをクリーンな状態に戻します。

### スタッシュの一覧を表示する

```bash
git stash list
```

スタッシュに保存された変更の一覧を表示します。各スタッシュには、`stash@{0}`、`stash@{1}`のような識別子が付与されます。



### スタッシュは適用する(スタッシュは残る)

```bash
git stash apply
```

最新のスタッシュを現在のブランチを適用する。
スタッシュ自体は残る。

### スタッシュを適用して削除する

```bash
git stash pop
```

最新のスタッシュを現在のブランチに適用し、スタッシュから削除します。

### 特定のスタッシュを適用する

```bash
git stash apply stash@{n}
```

`stash@{n}`は、適用したいスタッシュの識別子です。
特定のスタッシュを適用することができます。

### 特定のスタッシュを削除する

```bash
git stash drop stash@{n}
```

### すべてのスタッシュを削除する

```bash
git stash clear
```

保存されたすべてのスタッシュを削除します。

## 便利オプション

### 未追跡ファイルも含めてスタッシュする（-u / --include-untracked）

```bash
git stash -u
```

未追跡のファイルもスタッシュに保存します。デフォルトでは、未追跡のファイルはスタッシュに含まれません。

### 無視されたファイルも含めてスタッシュする（-a / --all）

```bash
git stash -a
```

`.gitignore` で無視されているファイルも含めて、すべての変更をスタッシュします。

### スタッシュにメッセージを付ける(-m)

```bash
git stash save -m "作業内容の説明"
```

スタッシュに説明を付けることができます。後でスタッシュを確認する際に役立ちます。

### 特定のファイルをスタッシュする

```bash
git stash push <file1> <file2>
```

特定のファイルだけをスタッシュすることができます。これにより、必要な変更だけを一時保存できます。

### ステージ済みの変更のみをスタッシュする(-k/--keep-index)

```bash
git stash -k
```

ステージ済みの変更を保持し、未ステージの変更のみをスタッシュします。

### スタッシュの内容を確認する

```bash
git stash show
git stash show -p
```

`git stash show`で変更ファイルの一覧を、 `p`オプションを付けることで、変更内容を確認できます。

## 終わりに
`git stash` は、作業中の変更を一時的に退避させることで、柔軟な作業フローを実現する強力なツールです。
便利なオプションを活用することで、より効率的に作業を進めることができます。
ぜひ、日々の開発に取り入れてみてください！

## 参考文献
[Git - git-stash Documentation](https://git-scm.com/docs/git-stash)
構造化モデリングP27-p29. @.36-38

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51423/e9298a55-2a25-43af-b1d8-aa3f7e0533bc.png)
構造化モデリングP27-p29. @.36-38

Dr. Kiyoshi Ogawa
P27
図１．３　いいとこ
ハードウェアとの協調：分析・設計・見直し(review)
目的によっていろいろ。センサで図ってモータ制御するなら、それぞれに必要な時間
品質と信頼：プログラミングテスト：検証(verification)と妥当性確認。
目的によってどういう品質をどう測るか。
リソース制約：設計テスト：妥当性確認(validation)
センサの能力
モータの能力
電源供給
つっこみどころ
時計回りとは限らない。

P28
IPA
SEC BOOKS：プロセス改善ナビゲーションガイド 〜ベストプラクティス編〜
https://www.ipa.go.jp/archive/publish/qv6pgp0000000ye1-att/000005129.pdf
https://qiita.com/kaizen_nagoya/items/be2ac977bd81e043eb26
枯れた技術
昔：
コンパイルするのに１時間かかった。
コンパイルエラーがないかを確かめてからコンパイラにかける。
フローチャート書いてからプログラムする。
今、コンパイルするのに１分かからないことがある。
コンパイルエラーはコンパイラにみつけてもらう。
図からコード、コードから図のどちらでもできるツールを作る。
p29
図１－４　どんな技術が必要か
10の６乗の世界
Matlab/Simulinkからのソースコード自動生成
Linuxのカーネルソース、CコンパイラのソースのようにOpen Sourceであるものを使う。
プロセスを管理する技術が必要。→プロセスが自動化していれば、要点だけ検査すればよい。
自動生成、自動試験をする技術が必要。
Cloud、docker, Github/Gitlab/Bitbucket
DevOps: Development, Operation
今：開発と保守は、同じ人が同じコンピュータでできる。
昔：開発と保守は、別の人が別のコンピュータでしていた。



p.36
蓋が閉じられた場合
沸騰状態が終了した場合
その他
ボタンが多ければいいというものではない。
ありえない組み合わせの場合どうするかを検討するのが大変。
温度制御方式は機種によって変わる場合がある。
仕向け地によって、日本茶か紅茶かで温度設定を調整して出荷することあり。

p.37
共通項目
操作量決定方式
PID制御：Proportional比例、Integral 積分、derivative: differencial 微分

高温エラー
温度あがらずエラー

p.38
安全にかかわるエラーの記述がない。電気安全。電気の担当者が分担。
漏電
感電
短絡
落雷
避雷針がほかのケーブルとつながっていると機器が壊れる
通信戦に雷が落ちて、機器が壊れたことがある
電源線に雷が落ちて、機器が壊れたことがある。テーブルタップが発火。（短絡防止機能付き）
機器のヒューズが飛んで止まる
家のブレーカが落ちて電源供給が止まる
発煙・発火
ICに逆に電流を流すと、CHIPからオレンジ色の炎が出る。
Ｃ＋＋版　Ｃ　ＰｕｚｚｌｅＢｏｏｋ

The C Puzzle Book: Operators 1: Basic Arthmetic Operations
https://qiita.com/kaizen_nagoya/items/2a0d8277d72bfc579df6

のC++版

```cpp:puzzle_op1.cpp
// The C Puzzle Book, Alan R. Feure, Printice Hall inc.
// Operators 1: Basic Arthmetic Operations
// https://qiita.com/kaizen_nagoya/items/2a0d8277d72bfc579df6
// Dr. Kiyoshi Ogawa
#define CPP
#ifdef CPP
#include <iostream>
using namespace std;
#else
#include <stdio.h>
#include <stdlib.h>
#endif
int main(void)
{
  int x;
#ifdef CPP
  std::cout << "CPP\n";
  x = -3 + 4 * 5 - 6; std::cout << x << "\n"; //Chapter1.1)
  x = 3 + 4 % 5 - 6 ; std::cout << x << "\n"; //Chapter1.2)
  x = -3 * 4 % - 6 / 5; std::cout << x << "\n"; //Chapter1.3)
  x = ( 7 + 6 ) % 5 / 2; std::cout << x << "\n"; //Chapter1.4)
#else
  printf("C\n");
  x = -3 + 4 * 5 - 6; printf("%d\n",x); //Chapter1.1)
  x = 3 + 4 % 5 - 6 ; printf("%d\n",x); //Chapter1.2)
  x = -3 * 4 % - 6 / 5; printf("%d\n",x); //Chapter1.3)
  x = ( 7 + 6 ) % 5 / 2; printf("%d\n",x); //Chapter1.4)
#endif
  return EXIT_SUCCESS;
}

```
Ｃ　Ｐｕｚｚｌｅ　Ｂｏｏｋをやる動機

ソースコードを入れてコンパイルする。

ビルドエラーを記録する。

ＣＰＵ、コンパイラごとの違いを知る。

コンパイルエラーをとる方法を経験する。

ポインタがやっかいだということを経験する。

ポインタは必ずしも使わなくてもよい。ー＞ＪＡＶＡ　言語としてポインタを排除

Ｃ／Ｃ＋＋でも、ポインタ使わずにプログラムは書ける。

ポインタを使わないと高速にならない場合だけ、コンパイラの最適化を利用することも可能。

# 課題
初版は、標準化前のＣ言語仕様。

main() -> int main(void)に直す。
void main(void)でもよい。

int main(void)にしたら、
 return EXIT_SUCCESS;
を追加する。

 EXIT_SUCCESS;
 を利用するなら
 ```c:op3.c
 #include <stdlib.h>
 ```
を追加する。
トレイルヘッド環境：ブラウザの問題



# We can't display this page because your browser blocks cross-domain cookies...

+ [Developer Org not allowing me to work in Lightning Experience any issue?](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000SW8di)

:::note
If you are using Google Chrome then you will need to click the "eye" icon on the right side of the URL bar:

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/1ffb79bc-7140-45fb-aab1-af696e5b774b.png)

Then toggle the enable 3rd party cookies:

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/f5df2dad-99d9-4a99-85bf-7d14eff7815c.png)

 

The page will refresh and then you will be able to work in Lightning Experience. 
:::
基本情報技術者標準教科書


基本情報技術者標準教科書
https://www.ohmsha.co.jp/book/9784274229817/

Chapter00　試験の概要と学習の進め方
Chapter01　基礎理論
Chapter02　アルゴリズムとプログラミング
Chapter03　コンピュータ構成要素
Chapter04　システム構成要素
Chapter05　ソフトウェア
Chapter06　データベース
Chapter07　ネットワーク
Chapter08　セキュリティ
Chapter09　システム開発技術
Chapter10　プロジェクト・サービスマネジメント（26P）
Chapter11　経営戦略・システム戦略
Chapter12　企業と法務
練習問題の解答と解説

# Chapter00　試験の概要と学習の進め方
テクノロジー、マネジメント、ストラテジの分野わけは、
テクノロジーとマネジメントだけでいいかも。



# Chapter01　基礎理論
## 離散数学
２進数、８進数、１６進数、１０進数
MSB:Most significant Bit　最上位
LSB:Least Significant Bit　最下位
１の補数、２の補数
固定小数点　モデルから自動精鋭して制御する場合に、計算時間をより均等にしたい場合は、浮動小数点ではなく固定小数点を選択することがある。
浮動小数点
桁あふれ（over flow)
シフト演算（論理、算術）
誤差（桁おち、打ち切り誤差、丸め誤差、over flow, under flow,絶対誤差、相対誤差）
べき集合
論理演算（論理和、論理積、否定、否定論理和、否定論理積、排他的論理和）
加法標準形？
ビット演算（マスク、反転、クリア）
論理回路（半加算回路、全加算回路、）
確率
期待値
代表値（平均値、中央値、最頻値）
ばらつき（範囲(range), 分散、標準偏差）
正規分布
回帰分析
情報理論（情報源、マルコフ情報源、遷移確率行）
符号理論　情報伝達モデル、
通信路符号化　CRC、パリティチェック、ハミング符号
情報源符号化　ハフマン符号化、ランレングス符号化
オートマトン　有限
正規表現
形式言語
BNF
逆ポーランド記法

制御　フィードバック、フィードフォワード、シーケンス
アクチュエータ、AD/DA変換



# Chapter02　アルゴリズムとプログラミング
Chapter03　コンピュータ構成要素
Chapter04　システム構成要素
Chapter05　ソフトウェア
Chapter06　データベース
Chapter07　ネットワーク
Chapter08　セキュリティ
Chapter09　システム開発技術
Chapter10　プロジェクト・サービスマネジメント（26P）
Chapter11　経営戦略・システム戦略
Chapter12　企業と法務
練習問題の解答と解説
無名関数もといラムダについて解説[競プロ]

### はじめに
[405Eの解答](https://atcoder.jp/contests/abc405/tasks/abc405_e)を読み込んでいる際に、珍しいものを目の当たりにしました。
関数の中に関数が定義されているではありませんか。
それについて調べたことをまとめています。

### 無名関数とは
いいとこ：
・スコープが限定されているから全体が見やすくなる
・その関数内でのみ使う処理ならそこのみ定義してあげた方が親切
・引数として渡す量が減る　関係変数をグローバルにしなくても使える
・変数のような扱いなので最適化がしやすい(最重要)

わるいとこ：
・他の関数では再利用できない :(

詰まるところ、競プロ向けというわけです。

別の用途もたくさん存在するそうですが、疎い知識で話したところで、正確な情報を提供できる望みは薄いため、詳しいことはコメント欄にて有識者さんのをご確認くだ

### 文法
~~~cpp:定義(繰り返し二乗法)
auto exp = [&](int base, int e) {
    int ans = 1;
    while(e) {
      if(e & 1) ans = ans * base % MOD;
      base = base * base % MOD;
      e >>= 1;
    }
    return ans;
};
~~~
通常の関数定義とは違い、()の手前に[]があることが特徴です。
これは外部変数へのアクセス所有権を決める属性のような場所です。

- &: 中で起きた数値変化が外にも適用される
- =: 外の変数値をコピーするだけ

他にもあるかもしれませんが、筆者の知識の限界をお許しください。(編集リクエスト通します)


~~~cpp:呼び出し
inv[MAXN] = exp(fact[MAXN], MOD - 2);
~~~
同じスコープ内で、こんな具合に呼び出します。これは通常の関数制御と完全一致していますね。

## まとめ
色んな関数の呼び出し方を知っておけば、あらぬところで効率化できるので、スポンジのごとく吸収しちゃいましょう。
ここまでお疲れ様でした！
Databricks AI/BIダッシュボードのアップデート(2025年5月)

今日2つのアップデートがありました。

# 複数テーブルの追加

![Screenshot 2025-05-14 at 8.31.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/9cdebd7c-54be-4732-855a-69fb9f09d730.png)

> **AI/BIダッシュボードで複数のテーブル、ビューを簡単に選択**
> 「テーブルの追加」ダイアログから一度に複数のテーブル、ビューを追加できます。

これまでは、データタブでテーブルを追加する際に一つずつしかテーブルが追加できませんでしたが、複数のテーブルを一度に登録できるようになりました。

![Screenshot 2025-05-14 at 8.27.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/3dc83470-db23-4ef3-ab70-fd942edd3862.png)
![Screenshot 2025-05-14 at 8.28.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/f1a2be5b-21ae-4453-8a30-d107329f2454.png)
![Screenshot 2025-05-14 at 8.28.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/e8f99ac7-9ebc-47ac-a6ee-7452c7e0389c.png)

# 日本語でポイントマップを作成

![Screenshot 2025-05-14 at 8.31.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/9930ea71-b99f-47ca-9b28-44a279d52b38.png)

> **AI/BIダッシュボードにおいてAIにアシストされたポイントマップ**
> ダッシュボードでポイントマップを生成するために、ダッシュボード作成者は自然言語のプロンプトを活用できます。

ポイントマップに関してはこちらもご覧ください。

https://qiita.com/taka_yayoi/items/98ead2a5804a62e2ce1f

以下のような空港の位置情報のテーブルを追加します。

![Screenshot 2025-05-14 at 8.29.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/fc298f54-45c8-4a62-8fb6-c87aa7c94f12.png)

キャンバスタブに移動して、ビジュアライゼーションを追加するとすでに候補として地図の作成が表示されています。

![Screenshot 2025-05-14 at 8.30.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/8b298b1f-ec46-45b5-a974-aaef5ec5c9d9.png)

これだけでポイントマップが作成されました。

![Screenshot 2025-05-14 at 8.30.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/fbb91497-f57c-468d-98e7-43af73c2b662.png)

日本語でもいけます。

![Screenshot 2025-05-14 at 8.31.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/69bda25a-f42c-4b5c-926b-d7a41074237a.png)

### はじめてのDatabricks

[はじめてのDatabricks](https://qiita.com/taka_yayoi/items/8dc72d083edb879a5e5d)

### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)
ローカル環境にてlaravel/breeze(ja)パッケージをインストールしようとした際のエラー対応

## CA証明書について

### 内容 
Laravl(ver12)にて、個人開発をしようとした際にlarabel/breeze(ja)パッケージをインストールしようとした際にSSLエラーが発生してつまづいたので解決した方法と学習した内容を記録。


### 環境
ローカル環境上でdocker-composeにて以下の構成になるようにコンテナを作成しています。

言語 php
RDBMS mysql
webサーバーソフトウェア nginx
メールサーバーあり
redisあり

※今回の投稿にて、各ソフトウェアのバージョンは無関係と認識しているので割愛します。

### 前提条件
①dockerコンテナ環境が「環境」の内容に沿って問題なく立ち上がっている。
②laravel/breezeパッケージをインストール済みである
→Blade with Alpineにて設定
③laravelの初期設定が完了している


### 詳細
laravel/breezeパッケージをインストール後に、多言語対応をしようとしてlaravel/breeze(ja)パッケージをインストールしようとした際に以下のエラーが発生した。

```
xx@xxxxxxxxxxxxxxxx:/src# composer require askdkc/breezejp --dev

In CurlDownloader.php line 390:

  curl error 77 while downloading https://repo.packagist.org/packages.json: error setting certificate file: /etc/ssl/certs/ca-certificates.crt


require [--dev] [--dry-run] [--prefer-source] [--prefer-dist] [--prefer-install PREFER-INSTALL] [--fixed] [--no-suggest] [--no-progress] [--no-update] [--no-install] [--no-audit] [--audit-format AUDIT-FORMAT] [--update-no-dev] [-w|--update-with-dependencies] [-W|--update-with-all-dependencies] [--with-dependencies] [--with-all-dependencies] [--ignore-platform-req IGNORE-PLATFORM-REQ] [--ignore-platform-reqs] [--prefer-stable] [--prefer-lowest] [-m|--minimal-changes] [--sort-packages] [-o|--optimize-autoloader] [-a|--classmap-authoritative] [--apcu-autoloader] [--apcu-autoloader-prefix APCU-AUTOLOADER-PREFIX] [--] [<packages>...]
```

エラー内容としてはComposerがパッケージをダウンロードする際にSSL証明書の検証に失敗したとの事です。
Composer は、HTTPS を使って通信するすべての場面で、SSL/TLS 証明書の検証を行います。

この内容から独自のrootCA証明書を再構築を実施しました(`.crt` バンドルを再生成というらしいです)

```
update-ca-certificates --fresh

```

※何らかの原因で.crtファイルが生成されなかった場合は以下のコマンドも実行をしてみてください

```
cat /etc/ssl/certs/*.pem > /etc/ssl/certs/ca-certificates.crt
```



### 補足

ここからの内容については、より理解を深めるためにネットで調べてまとめたものです。
間違えている点・理解を深めた方が良い点ございましたらご指摘をただけますと幸いです。

#### CA証明書とは‥?
CA = Certificate Authority（証明書認証局） の略です。

#### CA（証明書認証局）とは何か？
インターネット上で「このサーバーは本物です」と第三者的に保証する機関のことです。

#### 実生活に例えると
あなたがパスポートを持っているとします。
	•	そのパスポートに「政府（＝公的なCA）」のハンコがあるから、他国の入国管理が信頼してくれる。
	•	ハンコが自作だったら「信用できない！」と門前払いされる。

インターネットのCAも同じです。
サーバー証明書に「信頼されたCAの署名」があるかが命です。

#### 開発時によく使う mkcert って？
	•	開発環境用に自分専用のCAを作れるツール
	•	自分のマシンに「俺がCAだ！」というルート証明書を登録
	•	そのCAで *.local などの証明書を発行し、開発時にHTTPSで使う

今回ローカル環境はssl化をしていたが、
**mkcert が信頼されないのは「そのCA証明書がDockerなどの別の環境には登録されていないから」**
【GraghRAG】langchain x Ollama x Neo4jの実装

# neo4jインストール～起動
https://zenn.dev/ogiki/articles/edefbcded68419


## 参考にしたサイト
https://qiita.com/T_death/items/2cd8a098645dd207c91e

1. ローカルサーバーのダウンロード
1.1 OrackleJDK21のインストール
ページ下部
https://neo4j.com/docs/operations-manual/current/installation/windows/#windows-service

SHA256のハッシュの確認方法
https://qiita.com/setonao/items/4e9edd3e2064c56507e4

1.1 
https://neo4j.com/docs/operations-manual/current/installation/windows/#windows-service



# APOCのインストール設定
以下のエラーが出るため、confフォルダ内のneo4j.confファイルに以下の設定を追加
[参考にさせて頂いたサイト](https://zenn.dev/ogiki/articles/edefbcded68419#neo4j.conf%E3%81%AE%E4%BF%AE%E6%AD%A3)

## エラー内容
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4063479/ba6e6a6f-d998-46b0-bd68-233dc45ea131.png)

## APOCのダウンロード
GitHubよりapoc coreのプラグイン(apoc-5.XX.X-core.jar
)をダウンロード
neo4jのインストール先にある"plugins"に保管

[GitHub](https://github.com/neo4j/apoc)
[neo4j公式(参考)](https://github.com/neo4j/apoc/releases)

## confファイルの編集
neo4jをインストールしたフォルダ内のconfファイルに下記を追加

~~~ neo4j.conf
dbms.security.procedures.unrestricted=apoc.*
dbms.security.procedures.allowlist=apoc.*
~~~

修正後はサーバーを再起動
~~~ bash
bin/neo4j-admin server console
~~~
ビット配列(集合)の読み出し(シフト命令を使い任意の位置のビットを読み出す


いろいろ、注意
----

- UNOでの予定は、未定
- ほぼ、年齢ぶん、プログラミングしているが、今まで1回も使わない(半世紀以上
- 例題の為の例題
- 元ネタは、競技プログラミング系または、純数学系、アカデミック
- 論理的には、高速で高圧縮
- データベースでビットテーブルやビットインデックステーブルがあるらしい(それは、使った事は、ある
- はい、いいえだけを入れたテーブル(配列)
- (概論)[論理]計算機学で出てるく内容だか実装は、下っ端がやるらいから(しらんらしい

プログラム
----

オンラインプログラムpaiza


```c++


#include <iostream>
using namespace std;

#define BS(aa,bb) ((aa[bb>>5]>>(bb&0x1f))&0x01)

int main(void){
    // Your code here!
    
    unsigned long abc[16];
    
    int a;
    
    abc[0] = 0x00000001;
    abc[1] = 0x80000000;
    
    a = BS(abc,0);
    
    printf("in [0],%d\n",a);

    a = BS(abc,63);
    
    printf("in [63],%d\n",a);
    
}



```

```

in [0],1
in [63],1

```
GUI系エディタからvimに移行して感じたこと

# はじめに
最近、GUI系エディタのCursor、Zedを経てvimに移行してみたので、感想を簡単に書いてみます。

# コマンドを覚えるのが大変
Gemini曰くvimにはコマンドが基本的なものだけで数百個あるそうですが、僕はまだ20個くらいしか使えません。

# 編集が早くなる
次の単語に移動、一単語分削除、現在の位置から行末まで削除など、簡単な編集コマンドを使うだけでも編集の速度がだいぶ速くなりました。
また、vimの機能ではないですが、モダンターミナルのWarpを使用することでAIに補完してもらい、ターミナルコマンドを早く実行することができるようになりました。そのため、今ではファイル作成やファイルの中身のコピーもコマンドで行っています。

## どのくらい早くなるのか試してみる
競技プログラミングサイトのAtcoderのA問題10問ずつを解いて、平均の書く時間を測ってみます。
具体的には、初見のABC100~119のうち、ABC100、102、104...をvimで、ABC101、103、105...をGUI系エディタのCursorで書いて、平均何分で解けるか計算します。
### Vim
結果は全体で17分、一回あたり102秒になりました。
![スクリーンショット 2025-05-06 17.53.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3572788/7c237157-55f3-433d-b21c-0a6443103c9a.png)

### Cursor
結果は全体で18分、一回あたり108秒になりました。
![スクリーンショット 2025-05-06 18.28.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3572788/392ea3ca-5eba-4ba7-b0b5-2aa0c3065d06.png)

というわけで、結果はほとんど変わりませんでした。~~いやでも緑diffとか解くときは早くなったんだって~~
ただ、これはVimでキーボード操作が早くなったおかげで、GUI系エディタでもキーボードで操作することが増えたことも大きいと思います。

# 識別子の候補が表示されない
最初は慣れませんでしたが、これによって以下のことを心がけるようになったと思います。
- 変数名を見なくてもを覚えられるほどわかりやすくする
- 関数などによるスコープを、常に全体を見渡せるほどコンパクトにまとめる
一つ目に関しては、自分が作った変数名を、補完されなくても書けるくらい単純にするように心がけました。
二つ目は、エディタの上から下までに関数が入るようにする、逆に言えば引数を受け取るところや変数定義をしているところが常にエディタからはみ出さないようにするということです。これにより、変数を定義しているところを検索などによって探さなくてもすぐに見つけることができます。（大体24行くらいを目安にするといいそうです）

# おわり
vimを始めたきっかけはvimmerの平均年収は高いというデータに興味を持ったことでした。
([この記事](https://job-draft.jp/articles/323)からです)
まだ覚えていかなければいけないコマンドや機能もたくさんあると思うので、もっと練習していこうと思います！
【JavaScript】Objectのプロパティ追加において動的なKeyを追加する方法

Objectにプロパティを追加していく際にKeyを変数で作る際に躓いた過去の経験をもとに自身の備忘録として残しておこうと思う。


## ObjectのプロパティKeyを動的にする追加方法

変数を用いて **動的なキー** にしたい場合は **ブラケット記法** を用いることで解決する。

**単体の例**
```javascript
const key = 'email';
person[key] = 'taro@example.com';
console.log(person); // { age: 25, email: 'taro@example.com' }
```
**ループ処理の例**
```JavaScript
const array = ['太郎', '次郎', '三郎'];
const objct = {};
array.forEach(function(element) {
  objct[element] = element;
});
console.log(objct);
```

## JavaScript Objectのプロパティ追加方法まとめ

JavaScriptにはObjectにプロパティを追加する方法が複数存在する。

1. ドット記法
1. ブラケット記法
1. `Object.assign()`を用いる記法
1. スプレッド構文
※それぞれの使い方は下記の通り
---

### ✅ 1. **ドット記法（dot notation）**

```javascript
const person = {};
person.name = '太郎';
console.log(person); // { name: '太郎' }
```

---

### ✅ 2. **ブラケット記法（bracket notation）**

```javascript
const person = {};
person['age'] = 25;
console.log(person); // { age: 25 }
```

---

### ✅ 3. **`Object.assign()` を使う方法**

```javascript
const person = {};
Object.assign(person, { gender: 'male' });
console.log(person); // { gender: 'male' }
```

---

### ✅ 4. **スプレッド構文（新しいオブジェクトを作成）**

```javascript
const person = { name: '太郎' };
const updatedPerson = { ...person, age: 30 };
console.log(updatedPerson); // { name: '太郎', age: 30 }
```

※元のオブジェクトを変更せずに、新しいオブジェクトを作成したい場合に便利です。

---

誰かの参考になると嬉しい
AIが便利になって焦らないといけないの、実はプログラマーじゃない説

## AI時代に本当に淘汰されるのは誰か？

最近、「AIによってプログラマーは淘汰される」といった言説がよく見られます。確かに、AIはコードを書く作業をある程度自動化できるようになりました。ChatGPTやCopilotをはじめとしたツールは、短いコードスニペットからアプリケーション全体の雛形までを生成することができます。

その結果、「コードを書く人」＝「プログラマー」は仕事を奪われる、という論調が広まりつつあります。

しかし、私はこの流れを見ていて、むしろ危機感を持つべきは“コードを書いてこなかったエンジニア層”なのではないかと感じています。

## プログラマーはむしろ進化している

AIが登場したことで、コードを書くことに特化していたプログラマーたちは、これまでのやり方では生き残れないと強く感じています。そして、彼らの多くが企画力やアーキテクチャ設計、ビジネス理解などにスキルの幅を広げる努力を始めています。

AIに「書かせる」には、そもそも設計意図や要件の背景を明確に伝えなければなりません。そのため、プログラマーは自分の強み（実装力）を活かしつつ、AIを活用する立場に進化しつつあるのです。

彼らは「書く」ことを捨てたわけではありません。「理解した上で、あえてAIに任せる」スタンスを取れるようになってきています。

## 一方で、非プログラマー層は？

それに対して、これまでコードを書いてこなかった非プログラマー層（例：管理職、IT企画、業務SEなど）はどうでしょうか。

AIがあるからコードはもう書かなくていい、という甘い幻想に包まれて、「自分で理解する」ことから距離を置いてしまっていないでしょうか？

AIがどれだけ優秀でも、それが正しいか、安全か、有用かを判断できるのは人間です。コードを一切読めない・書けないままAIに頼る姿勢は、いずれ大きなリスクを生むでしょう。

このままでは、AIに使われるだけの存在になりかねません。

## 言語選定の観点でも見えてくる、今後の二極化

さらに注目したいのは、プログラミング言語そのものの選定にも変化が生まれていることです。

AIが生成するコードは、時にバグや不安定な挙動を含みます。動的型付けで柔軟なTypeScriptやPythonでは、実行してみるまで不具合に気づかないケースも多いです。

その一方で、RustやC、Goといった静的型付けの言語は、コンパイル時にエラーを検出し、システム的な安全性を高めてくれます。

加えて、AIが書いたコードの“意図や安全性”を人間が理解するには、その言語の持つ構文的・概念的な厳密さが大きく関わってきます。曖昧な構文の言語では、AIが何を意図しているかが読み取りにくく、逆に言語が厳格であればあるほど、意味を読み取りやすくなります。

ただしここで問題になるのが、**学習曲線（学びやすさ）**です。

RustやCなどの静的型付け言語は、安全性が高い一方で、習得にはそれなりの努力が必要です。一方で、PythonやTypeScriptのような言語は学びやすく、AIとの組み合わせによる“とっかかり”としては非常に魅力的です。

つまり、学びやすさを重視するなら動的言語から始めるのもアリだけれど、本質的な安全性や読みやすさの観点では、静的言語へのステップアップが避けられない未来も見えてきます。

この点においても、コードを書いてきたプログラマーは強いです。言語の特性を理解し、どこに落とし穴がありそうかを察知できます。これは“読めないままAIに任せる人”にはできない芸当です。

## 非プログラマー層はどうすべきか？

では、非プログラマー層はどうすればよいのでしょうか？

まず大前提として、「自分でAIを扱えるレベルのリテラシー」を持つことが求められます。すぐにコードを書けるようになる必要はありませんが、最低限「生成されたコードの意図や構造を理解できる」ようになることは必須です。

また、生成されたコードの評価や比較ができるようになるだけでも、AIに依存しすぎない安全な立場を確保できます。

具体的には：

* 簡単なプログラミングを学び、コードの読み方を身につける
* ChatGPTやCopilotを使い、どんな出力がされるのかを観察・検証してみる
* ドキュメントや仕様書を通じて、開発プロセスへの理解を深める
* 現場のプログラマーとのコミュニケーションを密にし、AI活用の実態を知る

これらを通じて、「AIが書いたものを監督できる立場」に立てるようになることが重要です。

## AI時代に生き残るエンジニアとは

AIがコードを書いてくれる時代になったことで、「人間が書けなくてもよくなる」と安易に考えるのではなく、「書ける人間がAIを活用できるようになる」という視点のほうが、むしろ現実に即しています。

コードが読める・書けることは、今後もエンジニアにとって非常に重要な基礎スキルであり続けるでしょう。

単に「AIに任せる人」ではなく、「AIに任せるかどうかを判断できる人」になる。そんな立場を目指していくことこそが、AI時代のエンジニアに求められる姿勢なのではないでしょうか。

---

## ✅ まとめ

* 「AIによってプログラマーが淘汰される」と言われているが、実際にはコードを書いてこなかった非プログラマー層の方が危うい可能性がある。
* プログラマーはAIを活用して設計・企画・自動化へと進化しており、むしろ“強くなっている”。
* 非プログラマー層は「AIがあるから大丈夫」と学習意欲を失いがちだが、それこそが最も危険。
* TypeScriptなどの柔軟な言語はAIとの相性が良いが、安全性や信頼性を担保するにはRustやCなど堅い言語の理解も重要。
* また、静的型付け言語は学習コストが高い反面、安全性・信頼性が高く、将来的にステップアップすべき価値がある。
* 今後は「AIに任せられるかどうかを判断できる人」が価値を持つ。
* 非プログラマー層も最低限のコードリテラシーを身につけ、「理解した上でAIを使う」立場を目指すことが求められる。

---

## 🙋‍♂️ 感想

今回この記事を書くにあたって、ChatGPTを使いました。
自分の考えを文章にまとめるのがあまり得意じゃないので、かなり助けてもらいました。
でもこれは、自分の課題でもあるなと強く感じました。

文章にすること、プログラムを書くこと。
AIにやってもらえるって本当に便利で楽なんだけど、
じゃあその上で、僕たち非プログラマー層が「自分でちゃんと学んでいこう」と思えるかどうか。

たぶん、ここが一番大事なんだと思います。
Geminiでハープを使う魔法少女を描いてみた。

# 概要

Geminiでハープを使う魔法少女を描いてみました。

# 実装

プロンプトと実行結果は以下の通りでした。

```
光のハープを使う魔法少女を描いてください。
```

![光のハープを使う魔法少女_20250514.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3192024/d7c12c3a-9447-4e8d-a674-d24be59037e3.png)



```
闇のハープを使う魔法少女を描いてください。
```

![闇のハープを使う魔法少女_20250514.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3192024/13a0ff36-4ed3-4eb4-8367-62e8f495b969.png)




```
聖なるハープを使う魔法少女を描いてください。
```

![聖なるハープを使う魔法少女_20250514.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3192024/7b0912a6-4ab9-434d-be2c-7febd1b2f625.png)


# まとめ

聖の子は可愛い。
何かの役に立てばと。
【公ド読】GitHub Copilot を使用したコードのリファクタリング

【公式ドキュメントを読もうシリーズ】GitHub Copilot を使用したコードのリファクタリング

## シリーズ概要

[https://qiita.com/yasu_programming/items/cec66f9e8d5d571e9ce3](https://qiita.com/yasu_programming/items/cec66f9e8d5d571e9ce3)

## URL

[https://docs.github.com/ja/copilot/using-github-copilot/guides-on-using-github-copilot/refactoring-code-with-github-copilot](https://docs.github.com/ja/copilot/using-github-copilot/guides-on-using-github-copilot/refactoring-code-with-github-copilot)

## 説明

GitHub Copilot を使用したコードのリファクタリングの方法が書かれている。

### 非効率なコード -> 最適なコード
`Can this script be improved?`

### 繰り返し書かれているコード -> 関数化
`move repeated calculations into functions`

### 読みづらいコード -> 簡潔化
`make this more concise`

### 複雑なコード -> 分割して簡潔なコードに
`split into 2 separate functions: one for cleansing data, the other for printing`

### 可読性の低い条件式 -> 可読性の高い条件式
`rewrite the condition to use a switch and use Java 21 syntax with null case, but also add documentation and provide a better function name`

### 不適切なパラメータ -> 適切なパラメータ
`use arrow notation and better parameter names`

### 不適切なシンボル名 -> 適切なシンボル名、一括変更
これは一番の発見だった。
`const members` などの変数名にカーソルを置いて`F2`キーを押すと、別名の提案をしてくれる。
名前はプロジェクト全体でも変更されるようなので、慎重に使うべきだが、便利になるだろうなと思った。


## 所感

これ以上ないコードだったとしても、一度リファクタリングでGithub Copilotでリファクタリングしてもらうことで、既存のコードに新しいとらえ方ができるそうだなと思ったので、新規作成、更新などの作業のすべての最後の工程で、仮に何も変わらなかったとしても、Github Copilotでのリファクタリングの工程を挟んでもいいかもしれないと思った。
# ShopifyとPythonでDTFプリントビジネスを自動化する方法（インディアナの実例付き）

# ShopifyとPythonでDTFプリントビジネスを自動化する方法（インディアナの実例付き）

## はじめに

アメリカ・インディアナ州の小さなDTF（Direct to Film）プリント業者 [Indiana DTF Print](https://indianadtfprint.com) の業務効率化を支援した事例を共有します。

本記事では、ShopifyとPythonを活用し、注文管理・入稿処理・ステータス通知の自動化を実現するステップを紹介します。

## 背景：DTFプリント業者の課題

DTF業界では、次のような課題があります。

- 手作業での注文処理が多い
- 入稿データの確認と整理に時間がかかる
- 顧客への通知が手動で非効率

これらの課題を解決するために、自動化を導入しました。

## 使用技術スタック

- Shopify API（Orders, Fulfillment, Webhooks）
- Python 3.10
- Flask（Webhookの受信）
- Google Drive API（入稿ファイル保存）
- Gmail API（顧客通知）

## 自動化の仕組み

### 1. Webhookの受信と注文データ取得

```python
from flask import Flask, request
import json

app = Flask(__name__)

@app.route('/shopify-order', methods=['POST'])
def handle_order():
    data = json.loads(request.data)
    order_id = data['id']
    customer_email = data['email']
    print(f"新しい注文を受信: {order_id} ({customer_email})")
    return 'OK', 200
## 2. 入稿データのGoogle Drive自動保存
Shopify注文のメモ欄に記載されたファイルURLを自動でGoogle Driveに保存します。

3. 顧客への自動メール送信
注文の受領確認と今後の流れを自動メールで送信。

python
Copy
Edit
from googleapiclient.discovery import build
from google.oauth2 import service_account
import base64
from email.mime.text import MIMEText

def send_email(to_email, subject, body):
    message = MIMEText(body)
    message['to'] = to_email
    message['subject'] = subject
    raw = base64.urlsafe_b64encode(message.as_bytes()).decode()
    service.users().messages().send(userId="me", body={'raw': raw}).execute()
結果と効果
この仕組みにより、Indiana DTF Print では次の成果が得られました。

手作業の削減（1日あたり1〜2時間の節約）

顧客対応の迅速化

ミスの減少と顧客満足度の向上

今後の展望
PDF請求書の自動生成

Slack通知の導入

AIによる入稿データの自動チェック

まとめ
DTFプリント業者にとって、ShopifyとPythonを組み合わせた自動化は現実的で効果的なアプローチです。
Indiana DTF Print の事例が、同業者や開発者の参考になれば幸いです。

markdown
Copy
Edit

---

## Notes:

- Replace `https://example.com` with your actual **Indiana DTF Print** URL.
- The article gives **technical value** and includes your backlink **3 times naturally**.
- It is appropriate for **Qiita’s developer audience** and **respects platform guidelines**.
- You can even **add screenshots** of Shopify dashboard or code execution if you want better engagement.

Would you like a **translated English version** for use elsewhere (like Me
ProxmoxVE 8系インストール時にloading driversから進まない問題を7→8へのアップグレードで解決

# TL;TR;
Proxmox 7.4のISOを使ってインストールし、セットアップ後に8.4にアップグレードします。

# はじめに
以下の投稿で取り上げられているように、loading driversのログから一向に進みません。
![error-image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/756429/a3f68404-09fa-47d4-8abc-1a50eb0dfc21.png)
https://www.reddit.com/r/Proxmox/comments/190gcej/proxmox_ve_81_install_freezes_during_loading
この問題は、BIOSの設定や、Debugモードなど別のProxmoxのインストールモードを使用しても解決しません

## 考えられる原因
nvidiafbというNvidiaのドライバーが原因と思われ、
主にProxmox v8で発生し、Nvidia製の古いGPUで発生するようです。
(当方はGT710で発生し、RTX3060では発生しませんでした。）
Radeonを使うように指示する投稿もありましたが、GPUを買い直したくはないでしょう。

## 対応方法

### Proxmox VE 7.4をインストール
以下のリンクからISOをダウンロードし、Refusや、Ventoyなどお好きな方法でブートUSBを作成し、機器にインストールします。
https://www.proxmox.com/en/downloads/proxmox-virtual-environment/iso/proxmox-ve-7-4-iso-installer

`pveversion`コマンドで、Proxmox 7.4.1がインストールされていることを確認します。

### aptにDebian12系のリポジトリを登録する
以下のスクリプトを実行し、リポジトリ(`/etc/apt/sources.list`)をdebian12(bookworm)に変更します。
#### Proxmox Subscriptionを契約している場合
```shell
cat << 'EOF' > /etc/apt/sources.list
deb http://deb.debian.org/debian bookworm main contrib
deb http://deb.debian.org/debian bookworm-updates main contrib

# Proxmox VE pve-no-subscription repository provided by proxmox.com,
deb https://enterprise.proxmox.com/debian/pve bookworm pve-enterprise

# security updates
deb http://security.debian.org/debian-security bookworm-security main contrib
EOF
```

#### Proxmox Subscriptionを契約していない場合（本番環境では推奨されていません）
```shell
cat << 'EOF' > /etc/apt/sources.list
deb http://ftp.debian.org/debian bookworm main contrib
deb http://ftp.debian.org/debian bookworm-updates main contrib

# Proxmox VE pve-no-subscription repository provided by proxmox.com,
# NOT recommended for production use
deb http://download.proxmox.com/debian/pve bookworm pve-no-subscription

# security updates
deb http://security.debian.org/debian-security bookworm-security main contrib
EOF
```

### GPG-keyを追加
以下のコマンドで追加できます。
```shell
wget https://enterprise.proxmox.com/debian/proxmox-release-bookworm.gpg -O /etc/apt/trusted.gpg.d/proxmox-release-bookworm.gpg
```

### OS, Proxmox, aptパッケージのアップグレードを実施
```shell
apt update
apt dist-upgrade
# いくつかのコンソール画面が表示されますが、`q`で閉じ、`Y`で進めます。
apt upgrade
```

最後に、アップグレードできているか確認します。

#### OSの確認
```shell
cat /etc/os-release
# -> Debian12であることを確認します。
```
#### Proxmoxの確認
```shell
pveversion
# アップグレードされていることを確認します。例えば以下のように表示されます。
# -> pve-manager/8.4.1/2a5fa54a8503f96d (running kernel: 5.15.102-1-pve)
```

## その他の方法
### GRUBの設定に、nomodesetを追記する
https://forum.proxmox.com/threads/installing-proxmox-when-it-stops-at-loading-drivers.156701/

### Debian12でインストール後、Proxmoxをインストールする
https://pve.proxmox.com/pve-docs/chapter-pve-installation.html


## 参考文献
https://pve.proxmox.com/wiki/Package_Repositories

https://forum.proxmox.com/threads/installing-proxmox-when-it-stops-at-loading-drivers.156701/
【Python初心者】コードリーディング力を高めるための戦略まとめ

Pythonの勉強をしている中で、<strong>「読む力（コードリーディング力）」</strong>の重要性を強く感じるようになりました。  
とくに文系の自分にとっては、つい一文一文を丁寧に読んでしまいがちで、全体の構造や目的を把握するのに時間がかかることがあります。

今回は、コードを効率よく読み解くために意識したいポイントや、日々の学習習慣について整理しました。  
自分自身の学習の振り返りとしてまとめています。

## 🔑 コードリーディングのコツ

### 読まない技術を身につける

すべての行を丁寧に読むのではなく、目的に応じて「読む深さを変える」ことが重要だと感じました。  
必要な部分だけに集中し、他はざっくり把握することで、理解のスピードも上がります。

### 頻出パターンは覚えてしまう

for文やif文の書き方、リスト内包表記など、よく出てくる処理は何度も出会って自然と覚えていけるように意識しています。  
覚えるほど読む必要が減って、リーディングの負担が軽くなっていきます。

## 🏃 コードを読むときのステップ（読まないための7ステップ）

実際にコードを読むときは、以下の手順を意識するようにしています。  
最初から細かいところまで読まずに、「全体から部分へ」と進めることで混乱が減ります。

### 0️⃣ ステップ0：ファイル名・ディレクトリ構成を見る

ファイル名・配置場所から「何の処理か」「どこに何があるか」を予測する

例：
- `calculate.py` → 金額計算に関する処理？

### 1️⃣ ステップ1：コードの構造を把握する

クラス定義、関数定義、実行部分を大まかにチャンク化し、全体の骨組みをつかむ

```python
def calculate_total(price, tax_rate):
    if price < 0:
        raise ValueError("Price must be non-negative")
    return price * (1 + tax_rate)

if __name__ == "__main__":
    total = calculate_total(100, 0.1)
    print(total)
```

大まかにチャンク化すると、関数の定義と実行部分が分かれており、「定義 → 実行」というコードの基本的な構造をしていることがわかります。

### 2️⃣ ステップ2：関数名・クラス名から意図を推測

関数名などのオブジェクトの名前やdocstring（コメント）から「何をする関数・クラスか」を想像する

```python
def calculate_total(price, tax_rate):
```

この場合、calculate_totalという関数名の時点で「合計金額を計算する関数かな？」といった予測ができます。

### 3️⃣ ステップ3：returnやprintを見る

そのブロックが「何を返すか」「何を出力するか」だけを見る

```python
return price * (1 + tax_rate)
```
税込価格を返していることがわかります。


### 4️⃣ ステップ4：引数と変数の流れを見る

入力→出力のつながりをシンプルに把握する

```python
def calculate_total(price, tax_rate):
    ...
    return price * (1 + tax_rate)
```

価格と税率を引数にして、税込み価格を返していることがわかります。

### 5️⃣ ステップ5：制御構造（if, for, whileなど）の有無だけ確認

複雑な処理ブロックがあるか、読む深さの判断材料にする

```python
if price < 0:
    raise ValueError("Price must be non-negative")
```

### 6️⃣ ステップ6：必要な部分だけ逆順で読む／実行して確認する

細部をすべて読むのではなく、必要に応じて読解・検証する

```python
# 試しにJupyter Notebook や Python の対話モード（REPL）などでprintを出力してみる
print(calculate_total(100, 0.1))  # => 110.0
```

## 📅 習慣にしたいこと

### 毎日短時間でも「7ステップで読む練習」

1日5分でもよいので、7ステップを意識してコードを読む習慣をつけることが大事だと思いました。

### 頻出パターンを蓄積する

よく出てくる構文や処理は、Qiitaにまとめたり、手書きノートに記録したりして、徐々に頭に入れていきたいです。

### 読む前に「どう読むか」考える癖をつける

いきなり1行目から読まないように、「このコードはどのステップまでで済むかな？」と考えてから読み始めるようにしています。

## 📝 まとめ

- コードリーディング力を上げるには「読まない技術」がとても重要  
- よく出てくる処理は自然と覚えていくことで、読む負担を減らせる  
- 読むときは7ステップで「読む深さを選ぶ」ことを意識する  
- 習慣としては、短時間でも毎日読む／Qiitaなどでアウトプットするのが効果的  

**「全部読む」から「選んで読む」へ**という意識の転換がポイント！

## おわりに

コードリーディングの力は一朝一夕では身につかないですが、日々の読み方を工夫するだけで、確実に進歩できると感じています。  
読み方を工夫することで、コードを読むのが少しずつ楽になってきました。

**もし他にも「こういう読み方が役に立った」「こういうクセをつけたら読みやすくなった」といったコツやアイデアがあれば、ぜひ教えていただけたらうれしいです。**
データベースの目的と役割

# データベースとは
「データベース」と聞いて、どんなイメージが浮かびますか?
無機質な表や難しい専門用語、あるいは黒い画面に文字がズラッと並んでいる光景を思い浮かべた方も多いのではないでしょうか。でも実は、あなたが毎日使っているアプリやサービス――SNS、ネットショッピング、ゲーム――その裏側すべてに、データベースが静かに、確実に、そしてものすごく重要な仕事をしています。
![ChatGPT Image 2025年5月14日 02_10_25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3951071/50fdfbe6-5a96-4fce-99cb-9b539e6929c3.png)



## 定義

- コンピュータを利用して、大量のデータをまとめ、様々な用途に活用できるように**一元的に保存・管理されたデータの集まり**です。
- 情報通信システムの内部にあり、利用者が直接目にする機会は少ないですが、**ほぼすべてのシステムで利用されている**重要な技術です。

:::note info
要するに  
**データをまとめて、うまく使えるようにした仕組み**です。
:::

---

## データベースとは？

- **datum** = 1つのデータ
- **data** = datumの複数形、データの集合
- **database** = dataの集合（データベース）

つまり、**データベース**は「たくさんのデータをまとめて管理する箱」のようなものです。

---

# 具体例：ECサイトのデータベース

ECサイト（ネットショップ）では、さまざまなデータがデータベースで管理されています。  
例えば「商品データベース」には次のような情報が保存されています。

| 商品ID | 商品名   | カテゴリ         | 価格   | 在庫数 | 商品説明                 | 画像URL                |
|:-------|:---------|:-----------------|:-------|:-------|:------------------------|:-----------------------|
| 0      | イヤホン | 家電・オーディオ | 6,980円 | 53個   | ノイズキャンセリング機能付き | /images/earphone.jpg   |
| 1      | スマホケース | スマホアクセサリ | 1,280円 | 120個  | シンプルなデザイン         | /images/case.jpg       |

このように、商品ごとの情報を**一元管理**することで、「商品一覧の表示」「在庫管理」「注文処理」など、さまざまな機能を実現しています。

---

# データベースの目的

1. **データの一元管理**
   - 複数の担当者やシステムが同じデータを使える
   - データの重複や矛盾を防ぐ

2. **効率的な検索・集計**
   - 必要なデータをすぐに探せる
   - 条件を指定して集計や分析ができる

3. **セキュリティの確保**
   - アクセス権限を設定し、重要な情報を守る
   - バックアップや障害時の復旧も容易

4. **データの整合性維持**
   - データの正しさや一貫性を保つ仕組み（例：在庫数がマイナスにならない）

---

# データベースの役割

- **システムの基盤**  
  Webサービス、業務システム、スマホアプリなど、あらゆるITシステムの「土台」として動作します。
- **情報の共有・活用**  
  複数のユーザーやサービスが同じデータを使うことで、情報の有効活用が可能になります。
- **業務効率化・自動化**  
  データベースを使うことで、手作業の集計や管理が不要になり、業務の自動化・効率化が進みます。

---

# まとめ

- データベースは「大量のデータを一元的に保存・管理する仕組み」
- すべてのITシステムの基盤であり、情報の整理・検索・活用・保護に欠かせない
- ECサイトなど、身近なサービスでも必ず使われている



**データベースの仕組みを理解することは、現代のIT技術を支える“基礎体力”です！**
TableauからDatabricksのDelta Sharingに接続してみた

## 前提
・利用環境：Databricks

https://www.databricks.com/jp/try-databricks?scid=7018Y000001Fi15QAC&utm_medium=paid+search&utm_source=google&utm_campaign=17377047998&utm_adgroup=138148229998&utm_content=trial&utm_offer=try-databricks&utm_ad=732035937815&utm_term=databricks%20%E3%83%88%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%AB&gad_source=1&gclid=CjwKCAiA8Lu9BhA8EiwAag16b8b3zbkIb3V7gp-8VUwKukXnhtVZRQ-1RY8SbETmGVgNT4bQramYmRoCX5wQAvD_BwE#account

## 参考ドキュメント

https://www.databricks.com/blog/unlock-real-time-cross-platform-collaboration-delta-sharing-tableau-connector

https://exchange.tableau.com/ja-jp/products/1019

## 操作手順（動画）
<iframe width="560" height="315" src="https://www.youtube.com/embed/451KIrE66CM?si=OxJmkmJWdohiW-m-" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
初心者こそ一歩踏み出そう～社会人になって一か月の私がAWSコミュニティに参加してみた～

# はじめに

社会人になり約一か月ほどが過ぎ、AWS Users Group – Japan(JAWS-UG)の二つの回に参加してきました。参加を通じて社会人経験の浅い私が感じたことを共有したいと思います。

# 自己紹介

- SIer勤務の一年目(業務は研修のみで実務無し)
- 情報系の大学院を修了
- AWSは12冠取得済み(AWSはハンズオンで少し触っている程度)

# JAWS-UGってなんなの？

https://jaws-ug.jp/

この記事を見ているということは、知っているかもしれませんが、JAWSのサイトには以下のように説明されています。

>JAWS-UGとは、AWS (Amazon Web Services) が提供するクラウドコンピューティングを利用する人々の集まり（コミュニティ）です。
一人ではできない学びや交流を目的としてボランティアによる勉強会の開催や交流イベントなどを行なっています。
私たちは日本全国に「支部」の形でグループを持ち、それぞれのテーマに基づいて活動を行なっています。
このコミュニティーは、非営利目的で活動しています。

もし興味のある方は以下のサイトなどから、イベントを検索できます！記事を読んで気になると感じた方はぜひ検索してみてください！

https://connpass.com/

# 参加してみようと思ったきっかけ

私自身かなり時間がある時期にAWSの資格試験に全て合格し、次に何をしようか考えていたところ、JAWS-UGに参加してみようという考えにいたりました。ただ、かなり知識をつけてから参加したものの、もう少し早い段階で行動しておけばよかったと思っています。

# 自身が参加した会について

私がこれまで参加した会は以下の二つになります。JAWS-UGではライトニングトーク(LT)とよばれる短い時間のプレゼンテーションを聞く形が多いです。内容としてはさまざまで、AWSに関する技術話からイベントに関する話、発表者の勉強の体験談や地域の話など様々でした。初心者の方でも参考になるような話も多かったと思います。
また、DE&I支部の会ではお悩み相談会ということもあり、参加者の方の質問に答えていただける時間もありました。どちらの回も本当に参加してよかったと思っています。補足ですが、ハンズオンをする回もあるので、気になる方はそれぞれの支部でどんな回があるか調べてみてください。

JAWS-UG DE&I支部 [誰でも参加OK]AWSアーキテクチャお悩み相談会 〜"あなたにフィットする選択肢"を一緒に探そう〜

JAWS-UG 彩の国埼玉支部 #1〜AWS Summit前のウォームアップ〜知識をアップデート！

# 参加して良かったこと

参加して良かったことは以下の三つです。

#### 1. AWSに関する知識が得られる

プログラムの内容は開催までに上がっていると思いますので、興味のある内容があれば、ぜひ参加するべきだと思います。中には初心者の人には難しい内容もあるとは思いますが、資料などは後からアップロードされますので、後で調べていくことでも成長に繋がると思います。ポイントとしては、AWSの初心者向けの本を読むことや余裕があればCLFまたはSAAなどの勉強をしていると、理解できることも多くなると思います。

#### 2. 様々な人と交流ができる

参加している方々は自身と同じような世代の方から大ベテランの方まで様々です。今のうちから外を知ることも大事ですし、聞いてためになる話ばかりです。ここまで様々な方々と出会えるのはコミュニティならではだと思います。普通にしていたらこういった機会はほぼないと思います。ポイントとしては、オフラインで参加して懇親会まで参加することです。勉強会の途中に初対面の人にいきなり話しかけるのも難しいですし、なかなか時間もありません。その後の懇親会であれば、時間もあるので色々な話が聞けると思います。一人で参加して社会人経験の浅い私でも受け入れられたので、大丈夫だと思います!

#### 3. 自分にとっていい刺激になる

上記の二つにつながるのですが、新しい知識を知ることやコミュニティで活動されている方々を見て、モチベーションも高まります。もし参加していなかったら、こういったアウトプットはしてなかったと思います。もし参加したら、良い影響をいっぱいうけて自身の成長に繋げてください!

# 最後に

私も参加した際は、一人で心細くとても緊張しました。それでも参加してみて得られたものはとても大きかったと思います。もし興味があり迷っている方は、一歩踏み出してみることをオススメします！
Tableau DesktopからSnowflakeへアクセス時、何度もMFA認証要求される現象への対策

## 現象
Tableau DesktopからSnowflakeへアクセス時、何度もMFA認証要求される現象への対策

## 前提
Tableau DesktopからSnowflakeへの認証は、IDパスワード＋MFA認証であること

## 解決方法
基本は[こちら](https://docs.snowflake.com/en/user-guide/security-mfa#using-mfa-token-caching-to-minimize-the-number-of-prompts-during-authentication-optional)に従う。

わかりにくいのは、「In the client connection string, update the authenticator value to authenticator = username_password_mfa.」の部分で、Tableau DesktopのドライバーパラメーターにMFAログインキャッシュ設定を入れる必要がある (下記手順を参照)

## Tableau Desktopのドライバーパラメーター設定方法
Tableau Desktop上で「接続」をクリック、「接続の編集」→「詳細」→「カスタム ドライバーパラーメーター」に「authenticator = username_password_mfa」を入力し「サインイン」
![SCR-20250514-bneb-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341549/855abd95-cb12-4adb-9054-01e1800e6beb.png)


## 参考
https://docs.snowflake.com/en/user-guide/security-mfa#using-mfa-token-caching-to-minimize-the-number-of-prompts-during-authentication-optional
[TypeScript学習記録] ジェネリクス

##  ジェネリクスとは
ジェネリクスは、型を「変数」のように扱い、関数やクラスを汎用的にする仕組み。特定の型に縛られず、型安全を保ちながらコードを再利用可能に。

```typescript
function identity<T>(str: T): T {
  return str;
}

const str: string = identity("Hello"); // Tはstring
const num: number = identity(42); // Tはnumber
```

**ポイント**: `<T>`で型を動的に定義。入力と出力の型を一致させる。

## なぜジェネリクスを使うか
- **型安全**: 型を指定し、エラーを防ぐ。
- **再利用性**: 1つの関数で複数の型に対応。
- **Next.jsでの活用**: APIレスポンスやPropsの型を柔軟に扱う。

例：配列の最初の要素を返す関数。

```typescript
function getFirst<T>(items: T[]): T {
  return items[0];
}

const firstStr: string = getFirst(["a", "b"]); // "a"
const firstNum: number = getFirst([1, 2, 3]); // 1
```

**ポイント**: 配列の型を動的に扱い、型推論で安全に。

## 型制約（extends）
ジェネリクスの型に制限を加える。

```typescript
function printLength<T extends { length: number }>(item: T): number {
  return item.length;
}

console.log(printLength("Hello")); // 5
console.log(printLength([1, 2, 3])); // 3
// console.log(printLength(42)); // エラー：lengthがない
```

**ポイント**: `extends`で`length`プロパティを要求。Next.jsのフォームデータ（文字列や配列）に便利。

## 複数の型パラメータ
複数の型を扱う。

```typescript
function merge<T, U>(a: T, b: U): [T, U] {
  return [a, b];
}

const result: [string, number] = merge("Taro", 25); // ["Taro", 25]
```

**ポイント**: `<T, U>`で複数型を定義。Next.jsのAPIで異なるデータ型をペアで返す場合に有効。

## インターフェースとジェネリクス
インターフェースにジェネリクスを適用。

```typescript
interface Response<T> {
  data: T;
  status: string;
}

const userResponse: Response<{ name: string }> = {
  data: { name: "Taro" },
  status: "success",
};
```

**ポイント**: `Response<T>`でデータ型を動的に。Next.jsのAPIレスポンス型に最適。

## クラスとジェネリクス
クラスで汎用的なデータ処理。

```typescript
class DataStore<T> {
  private items: T[] = [];
  add(item: T): void {
    this.items.push(item);
  }
  getAll(): T[] {
    return this.items;
  }
}

const numberStore = new DataStore<number>();
numberStore.add(1);
console.log(numberStore.getAll()); // [1]
```

**ポイント**: クラスで型を再利用。Next.jsの状態管理やデータキャッシュに活用。

## まとめ
ジェネリクスは型をパラメータ化して再利用可能で型安全なコードを実現する機能。関数、インターフェース、クラスで使用でき、Web開発（例：Next.js）でAPIやコンポーネントの型安全性を高める。
【Java】5分で読めるListの基本知識

## Listを一言で説明
可変長の配列のこと
要素数を指定せずに宣言する。

## Listの特徴
`List`はインタフェースのため、実装クラスを使用する
実装クラスの例
* `ArrayList`：可変長配列で読み書きを高速に行える
* `LinkedList`：双方向連結リストで挿入や削除に強い

## Listの基本操作
1. 要素の追加 `add()`
1. 要素の削除 `remove()`　(→`delete`は×)
1. 要素の取得 `get()`
1. 要素数の取得 `size()`
1. 要素の存在チェック `contains()`
1. 要素の空チェック `isEmpty()`
1. 要素を全て削除 `clear()`

```
List<String> fruits = new ArrayList<>();
fruits.add("Apple"); // 1.要素の追加
fruits.add("Banana");
System.out.println(fruits.get(0)); // 3.要素の取得 Apple
fruits.remove("Apple") // 2.要素の削除
System.out.println(fruits.size()); // 4.要素数の取得 1
System.out.println(fruits.contains("Banana")); // 5.要素の存在チェック true
fruits.clear(); // 7.要素を全て削除
System.out.println(fruits.isEmpty()); // 6.要素の空チェック true
```

記事作成時間：20分
[第1回]Javaでクリニック向け予約・問診アプリを一から作ってみる

医療・ヘルスケア事業の現場から：JAVAで予約・問診アプリを1から作ってみる

##
✅ はじめに
この記事では、Javaを使って簡単な予約・問診アプリを自作していく過程を、備忘録＆学習記録としてまとめていきます!
##
🎯 背景
私は医療工学系のバックグラウンドを持ち、現在は医療・ヘルスケア分野の事業開発に携わっています。今はビジネス寄りの業務メインですが，やっぱり，もっと技術寄りのことしたい！サービス企画考えるんじゃなくて，サービスを運用するためのシステムを作る側になりたい．．．！という思いがあり，個人開発を始めてみました！
元々プログラミングはC++,pythonをちょこちょこ使っていたのですが，社会人になってから，
GASでちょっと効率化したり，Automator使って自動投稿したりとコードがっつり！みたいなことが皆無になりました．

日々働く中で，
「もっと現場で使えるツールを、技術的な観点からも自分で作ってみたい」と感じることが増えたのもあり，技術スタック増やしてもっと開発できるエンジニア寄りのキャリアを目指したい！とおもい，始めてみた次第です！

今は，オンライン診療や、来院前の問診データ活用など、現場の手間を軽減する＆活用されていない診療データを活用してCRM等活かす．．．といったことに興味があります．

今回はまず第一歩として、クリニック向けを想定した「予約＋簡単な問診」ができるミニWebアプリをJavaで作ってみることにしました👏

## 
💡 目指すアプリの概要
- 対象ユーザー：患者（予約者）、管理者（医療従事者）
- 主な機能：
- 予約登録（日時・名前・症状・連絡先など）
- 予約内容の一覧表示（管理者側）
- 問診として簡単なメモを登録
- 写真アップロード（※今後のアップデートでOCR機能も追加予定）

## 🔧 技術的スタック
勉強もかねて下記で作ってみようと思います．．．！

| 項目 | 内容 |
|-----|-----|
フロントエンド|	Java Swing（まずはローカルGUIアプリ）
データベース|	SQLite（シンプルでファイルベース）
バックエンド処理|	JDBC（JavaからDB操作）
ソース管理|	Git + GitHub
将来的な拡張|	Webアプリ化（Spring Bootなども検討）

第2回へ続く・・・
https://qiita.com/Leonhard/items/9326912ebc1253161b4b
【VSCode】SQLite拡張機能を入れたのに「Open Database」が出ない？解決方法まとめ

VSCodeでSQLiteを使いたくて拡張機能を入れたのに、  
右クリックしても「Open Database」が出ない…という初歩的部分でハマったので、  
同じように困っている人向けにメモを残します。

## ✅ 問題

以下のような状況でした：

- `SQLite`（作者: alexcvzz）拡張機能をインストール済み
- `.db` ファイルも作成済み
- 右クリックしても「Open Database」が出ない！

---

## ✅ 原因

拡張機能が**現在のプロファイルに反映されていなかった**のが原因でした。

---

## ✅ 解決方法

以下の設定をチェックして有効にしたところ、すぐに解決しました。

### 📌 設定 > 拡張機能 > 設定の同期

✅ `すべてのプロファイルに拡張機能を同期する`  
✅ `拡張機能を同期する`

をオンにしてください。

![スクリーンショット 2025-05-14 001309.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/867423/fc04bc1a-b6ee-4473-bba0-d2fbf8fd23bd.png)


---

## ✅ 補足：SQLiteを使う基本手順（VSCode）

1. 拡張機能で `SQLite` をインストール
2. `.db` ファイルを作成（例：`hoge.db`）
3. `.db` を右クリック → `Open Database` が出ていれば成功
4. クエリエディタで SQL を実行できる！

---

## ✅ まとめ

プロファイルを使っていると、拡張機能がうまく反映されないケースがあるので、  
同期設定のチェックは意外と重要です。

同じハマり方をした人の助けになれば嬉しいです！