OmniAICreator/Qiita-1.07M huggingface dataset:
Ghosttyでターミナルをカスタマイズしてみた

自分がブラウザの次に一番使うのがターミナルだ。せっかくなら好みの見た目と使い心地にしたい。そう思い、人生で初めてターミナルをカスタマイズしてみた。

![01-neofetch.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3911823/f71e0334-09f8-698e-704e-6f452fb0cc14.png)

構成：
- マシン：M1 Pro
- OS：macOS 15.1.1 (24B91)
- パッケージマネージャ：Homebrew 4.4.13
- シェル：zsh 5.9
- ターミナル：Ghostty 1.0.0 stable
- フォント：BlexMono Nerd Font
- Theme：ohmyzsh

事前知識：
- Homebrewの使い方
- シェル、ターミナルとは何か

## ターミナルエミュレータ

macOSのデフォルトのターミナルだとカスタマイズがしづらいので、ターミナルエミュレータを使う。まだ開発がサイドプロジェクトとして始まって[3年ほど](https://mitchellh.com/writing/ghostty-devlog-001)だが、1.0.0が最近リリースされたのでGhosttyを選んだ。ちなみに開発者のMitchell HashimotoはTerraformなどを手掛けるHashicorpの創業者だ。

GhosttyのインストールはHomebrewで普通にできる。

```zsh
brew install --cask ghostty
```

## フォント

[Nerd Font](https://www.nerdfonts.com/)というシリーズのフォントがあり、これらにはアイコンが含まれているため、後ほど紹介するOh My Zshや、LazyVimで綺麗にアイコン達が表示されるようになる。

BlexMono Nerd Fontは一覧を眺めてパッと見気に入ったものを選んだ。

macOSでのNerd Fontのインストールはとても簡単で、Homebrewのコマンドひとつで済む。

```zsh
brew install --cask font-blex-mono-nerd-font
```

## Ghosttyの設定

現在Ghosttyの設定をmacOSでするには`CMD + ,`で出てくるTextEditで書くのが一番便利。そこに一つ一つの設定を書き込んでいく感じだ。

自分の設定はこうなっている。

```
background-blur-radius = 20
background-opacity = 0.9
font-family = BlexMono Nerd Font Mono
font-size = 16
mouse-hide-while-typing = true
theme = Ryuuko
window-decoration = true
```

このRyuukoというカラーテーマは初めて見たが、とても気に入った。ターミナルから直接カラーテーマのプレビューを表示できるのもGhosttyの良いところだ。

`ghostty +list-themes`でプレビューできる。

![02-list-themes.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3911823/b487c87f-c445-638e-093f-33b8b183149d.png)

設定が終わり、Ghosttyを再起動したら変更されているはずだ。

## Theme

Oh My Zshではプラグインなどでシェルの使用感をカスタマイズできるらしいが、今の自分には必要ないと感じている。これはほとんど画像の赤枠にあるところのために使っている。

![03-ohmyzsh.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3911823/a6253c7f-4c1f-058b-864d-67517c3045d0.png)

Oh My Zshをインストールすると既存の`.zshrc`が上書きされるが、インストール前のものは`.zshrc.pre-oh-my-zsh`に保存されている。

Themeは"agnoster"を選んだ。自分が使っている`.zshrc`は<https://github.com/yutatokoi/dotfiles/blob/main/.zshrc>から参照できる。

## まとめ

まだ開発途中のGhosttyを基にしたカスタマイズだが、十分早いし、今の所トラブルはない。

今までエディタは主にVimで、たまにVSCodeを使っていた。けど好みのターミナルにできたのだから、次はNeovimに挑戦しようと思っている。

![04-neovim.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3911823/ecf59b1a-244a-046f-ce29-a784a1d96972.png)
【スマホからでも遊べる】pygameで戦車ゲーム作ってpygbagで公開してみた

## はじめに
　先日`pygbag`というのを使って、ブラウザ上でpygameを動かせるようにする。すなわちネット上に公開する方法を紹介したので、そちらを使って、作ったゲームを公開したいと思います。このゲームはスマホ向けに作ってみました。PCでもキーを押せば発射できるので、マウスとキーボードで一応遊べますが、スマホでやった方が面白いと思います。

#### 宣伝

https://qiita.com/Prosamo/items/de12a90ba026b7517d2a

## ぜひプレイしてみて！

https://prosamo.github.io/tank-game/

<a href="https://prosamo.github.io/tank-game/"><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3922095/fee24754-cb9a-19d0-ad96-727984b047fe.png" alt="写真" width="300"></a>

## 操作方法
　操作はシンプルです。左のぐるぐるを動かすと移動します。青いボタンを押すと向いている方向に弾を撃ちます。弾は0.8秒ごとに１発溜まり、5発まで溜まります。5発溜まっているときに赤いボタンを押すと、全弾消費してレーザーを撃てます。

## おまけ
　ゲーム中のスティックが、結構見た目がそれっぽくて気に入ったので、実装方法を置いておきます。用はマウスの座標と自分の座標から、`math`モジュールを使って角度を割り出すってだけです。ゲーム中ではその角度を取得して、戦車の画像を回転させるのに使っています。
```python
class Stick:
    def __init__(self, x, y, r, border_width = 2):
        self.x, self.y = x, y
        self.r = r
        self.inner_r= int(self.r * 0.6)
        self.border_width = border_width
        self.inner_x = self.x + self.r - self.inner_r # 初期位置を調整
        self.inner_y = self.y + self.r - self.inner_r # 初期位置を調整

        self.angle = 0
        
        self.holding = False
    def draw(self):
        # 透明な土台を設定
        alpha_surface = pygame.Surface((self.r*2, self.r*2), pygame.SRCALPHA)
        alpha_surface.fill((0, 0, 0, 0))
        #白い枠線
        pygame.draw.circle(alpha_surface, (255, 255, 255, 128), (self.r, self.r), self.r, self.border_width)
        #灰色の丸
        pygame.draw.circle(alpha_surface, (128, 128, 128, 128), (self.inner_x, self.inner_y), self.inner_r)
        #描画
        screen.blit(alpha_surface, (self.x, self.y))
    def update(self, mouse_x, mouse_y):
        if self.holding and mouse_x <= 128:    #ここは任意の範囲を指定したらOK
            dx = mouse_x - (self.x + self.r)
            dy = mouse_y - (self.y + self.r)
            self.angle = math.atan2(dy, dx)
            self.inner_x = self.r + self.r * 0.4 * math.cos(self.angle)# 中心からの距離を計算
            self.inner_y = self.r + self.r * 0.4 * math.sin(self.angle)# 中心からの距離を計算
            self.inner_x = int(self.inner_x)
            self.inner_y = int(self.inner_y)
        else:
            self.inner_x = self.r
            self.inner_y = self.r

```
↓イベントloop中に配置
```python
mouse_pressed = pygame.mouse.get_pressed()
if mouse_pressed[0]:
    # 左クリックが押されている場合
    stick.holding = True
else:
    stick.holding = False
```
　別に最適化しているわけではなく、雑に作ったものですが、スティックを実装したいと思っている人は参考になると思います。スティックが反応する範囲を`region`とか名前つけてインスタンス作成時に設定できるようにした方が親切ではありますね。

## 最後に
　ここまで読んで下さりありがとうございました。また、ゲームをプレイしていただいた方もありがとうございました。`pygbag`の情報が日本だとほぼ無いので、サンプルプログラムの一つ的な感じで見てもらえればと思います。こちらは、マウス操作がしっかりできるよっていうのをメインで推してるのですが、フォント関連がしっかりできるよっていうのをメインに、タイピングゲームも公開しているので、`pygbag`が気になる方はそちらもご覧ください。
個人開発からチーム開発、そして伝説へ...!?

# はじめに

僕は、個人開発で、**テック人材にスポット相談ができるYard**というサービスを開発しています。

https://yard.tips/

このサービスは今年の10月にベータ版として公開しましたが、その頃から徐々に開発メンバーを増やしていき、現在では**僕を含む5人パーティーで冒険もとい開発・運用**しています。
今回は、**個人開発からチーム開発に切り替えた経緯**について紹介したいと思います。


# なぜ、個人開発→チーム開発に？

Yardの冒険は、個人開発から始まりました。

当初、YardのUIやUXのイメージは自分の中で明確にありました。そのため、ゼロイチのプロダクトの初期フェーズでは、自分一人でスピーディに進める方が最適だと考えていました。

また、この段階で他のメンバーを加えて分業してしまうと、コミュニケーションコストが増え、エッジの効いたプロダクトが創れないんじゃないかという懸念もありました。

このアプローチでベータ版まで作って、ユーザーのフィードバックを収集しました。しかし、次第に一人で抱える負担が大きくなってきました。


特に顕著だったのが、**プロダクトの方向性を決めるPdM的な人格**と**実際に手を動かすエンジニア的な人格**を、一人で兼任することの難しさでした。

エンジニアとしての意識が強まると、どうしても「作りやすいもの」に逃げがちになる一方で、PdMとしての視点では、もっとユーザー視点に立った大胆な判断が求められます。これらを両立することに苦しむようになりました。

こうしたマインドシェアの課題に直面し、よりアジリティ高く開発を進めるため、それぞれの領域のプロとチームを組む決断をしたのです。


# 現在のパーティー（チーム構成）と変化

現在、チームYardは以下の5人で活動しています。

- プロダクトオーナー（僕）
- エンジニア
- デザイナー
- マーケター
- よろず屋（インターン生）

この5人のうち、僕以外のメンバーは全員、副業として手伝ってもらっています。

チームのジョインした経緯は以下の通りです。

- エンジニア＆マーケター: 元々の知り合い
- よろず屋（インターン生）: 知り合いの紹介
- デザイナー: 元々Yardの普通のユーザーだった方


![「ドラクエⅢの賢者（女）がITエンジニアに転職する絵」をGrokに生成させた画像](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/171192/116bd8bf-421a-bf93-ec4e-67cc1fb53869.jpeg)
_↑「ドラクエⅢの賢者（女）が ITエンジニアに転職する絵」をGrokに生成させた画像_



僕はプロダクトオーナーでありつつ、以下のタスクを主に担当しています。

- GitHub Issueの管理
- GitHub Projectでのカンバンの管理
- 各種システムの設計
- コードレビュー
- ユーザーインタビュー
- メンバーとの週次の1on1


大きまな機能追加においては、自分でコードを書くこともありますが、大半の修正は**エンジニアメンバーにタスクを移譲**できるようになりました。

また、デザインに関しては、**デザイナーにほぼ一任**しています。
さらに、マーケターもチームに加わったことで、**新たにマーケティング施策**にも手が回るようになりました。


# 個人開発→チーム開発で良かったこと

## 1) プロダクトに向き合う時間の総量が増えた

当然、人数が増えたのでプロダクトに向き合う時間の総量が大幅に増えました。
GitHub Issueのbacklogに積まれていたものも、手が回るようになりました。


## 2) 責任範囲が分離され、スピードが上がった

僕の場合、フロントエンドのデザインが得意ではありませんでした。
個人開発時代は、デザインに多くの時間や労力が割いていましたが、デザイナーにこの部分を任せられるようになったことで、大きく負担が軽減しました。
その結果、設計やコードレビューなど、他の重要なタスクに集中できるようになり、開発スピードが上がりました。
また、中長期の戦略策定などに時間を使う余裕も生まれました。

## 3) 複眼的にレビューしあえる

例えば、ランディングページ（LP）のワーディングについて、1人で進めていると「初見の人にとってわかりやすい表現」が徐々に見えなくなっていきます。
しかし、チームメンバーから客観的な意見やツッコミが入ることで、建設的な議論が生まれ、物事を効率的に決めることができるようになりました。


## 4) 仲間を効率的に集められたこと

上記はチーム開発したことでのメリットですが、では最初から個人開発ではなくチーム開発で進めていたらどうだったでしょう。

自分が作りたいものをある程度形にしたことで、プロダクトの世界観に共感する人たちを集めやすくなりました。

もし最初からチーム開発を選んでいた場合、ビジョンだけを語って仲間の心を動かすのは難しかったのではないかと思います。


# さいごに

僕たちのYardという名の冒険は、ドラクエⅢ でいうと、まだ**アリアハン大陸から出ていないくらい**のフェーズです。

これから、ドラマチックな展開が待ち受けていることでしょう。
ぜひ、応援よろしくお願いします！

---

また、皆さんも、**Yardをキッカケに自分だけの冒険の仲間を集めてみませんか？**

![ドラクエⅢのルイーダの酒場で仲間を集める絵](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/171192/3ba766f7-72c8-6d92-7ead-3a92a567b118.jpeg)
_↑「ドラクエⅢのルイーダの酒場で仲間を集める絵」をGrokに生成させた画像_

Yardは、テック人材のスポット相談できるサービスです。
いわば、**専門的なスキル・知見を持っている方・求めている方が、巡り合えるルイーダの酒場**です。
自分にないスキルを補ってくれる心強い仲間をYardで探してみてはいかがでしょう？

ぜひ、以下から会員登録して冒険の旅に出ましょうか！

https://yard.tips/auth/signin
スプレッド構文での結合

## なぜこの記事を書こうと思ったのか
Reactを使用した開発経験が1年を超え、自分のコードにおける書き方や意図を言語化できるようになってきました。最近ではコードレビューを担当する機会も増えましたが、他の人が書いたコードに登場するスプレッド構文について、「これはどういう処理でしょうか？」と確認する場面が頻繁にあります。

そのため、スプレッド構文で可能なことやその活用方法を整理し、記事としてまとめてみようと思いました。この記事を通じて、自分の理解を深めると同時に、同じ疑問を持つ方々に役立つ情報を提供できればと思います。

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Spread_syntax

## そもそもスプレッド構文とは？
JavaScriptのスプレッド構文とは、ECMAScript 6（ES6）で導入された機能です。
配列の連結、配列のシャローコピーの作成、文字の配列への変換、オブジェクトの結合や複製、関数やコンストラクタへの動的な値の受け渡しなど、さまざまな用途で使用できます。

特に配列のシャローコピー作成や、配列の連結では自分の中でも使用してきています。
が、「オブジェクトの結合」, 文字の配列への変換などはあまりやってきてなかったなぁなどという印象です。

## 実際に使ってみる

### 配列のコピー作成
React環境では主に、state更新時などで使用しますね。
pushなどの破壊的メソッドの対策にも使用します。

```javascript
  const arr = [1, 2, 3];
  const value = [...arr];
  console.log(value);
  //結果 -> [1,2,3]
```

### 配列の結合
配列管理で一番使っている気がします。
```javascript
  const arr1 = [1,2,3];
  const arr2 = [3,4,5]
  const value = [...arr1, ...arr2];
  console.log(value) 
  //結果 -> [1, 2, 3, 3, 4, 5]
```

### オブジェクトの結合
同じキー名が両方のオブジェクトに存在する場合、後に書かれたオブジェクトの値で上書きされます。
```javascript
  const obj = { name: "taro", age: 10 };
  const obj2 = { name: "jiro", age: 10 };

  console.log({...obj, ...obj2})
  // 結果 ->  {name: 'jiro', age: 10}
```
### オブジェクトの結合②
一方のオブジェクトに存在しないキー名がある場合、そのキーと値は結合後のオブジェクトに追加されます。

```javascript
  const obj = { name: "taro", age: 10 };
  const obj2 = { name: "jiro", age: 10, from: "tokyo" };

  console.log({ ...obj, ...obj2 });
  // 結果 ->  name: {'jiro', age: 10, from: 'tokyo'}
```

### オブジェクトの結合③
一方のオブジェクトにしか存在しないキーは、結合後のオブジェクトにそのまま残ります。
ただし、同じキーが存在する場合は、後に書かれたオブジェクトの値で上書きされます。

```javascript
  const obj = { name: "jiro", age: 10, from: "tokyo" };
  const obj2 = { name: "taro", age: 10 };

  console.log({ ...obj, ...obj2 });
  // 結果 ->  name: {'jiro', age: 10, from: 'tokyo'}
```

### オブジェクトの結合④
2つのオブジェクトでキー名が異なる場合は、そのまま結合されます。
```javascript
  const prof01 = { name: "jiro", age: 10 };
  const prof02 = { from: "tokyo", like: "baseball" };

  console.log({...prof01, ...prof02})
  // 結果 -> {name: 'jiro', age: 10, from: 'tokyo', like: 'baseball'}
```
## 最後に
可変引数などだけはまた別途更新してみたいと思います。
ありがとうございました。
linuxの基本操作、学籍番号と名前をプリントアウトして「はんこ」を貰う(例題の為の例題)(arduinoインストールのおまけ)


x 過去ログを見よ!!!
x だいたい、あっている!!!


目的
Utunbu、ArduinoIDEのカウンターが上がらないのは、
激ムズだからと思ったので例題の為の例題


![o_coq717.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/f1c17acb-d38c-7953-3ca9-62812600ff23.jpeg)



例題
----

仮に学籍番号と名前は、「2025E046 YAMADA TARUO」
プリンターコマンドは、「lpr」のパイプとする。
ディレクトリーは、OUT_d
ファイルは、OUT_d.txt

まず、ユーザーディレクトリに戻る

```

cd

```

ディレクトリーを作成する


```

mkdir OUT_d

```

ディレクトリーの移動


```

cd OUT_d

```

タグファイル?バトンファイル?ミニファイル?を作成する


```

echo 2025E046 YAMADA TARUO > OUT_d.txt

```

ファイルを確認する


```
ls


```

ファイルの中身を確認する

```

cat OUT_d.txt

```

プリントアウトする


```

cat OUT_d.txt | lpr


```

一個したのディレクトリーに戻る


```

cd ..

```

プリントした紙をもって、ハンコを貰ってチェックしてもらう

「おわり」
Gateway Load Balancerっていつ使うんだっけ？超簡単に

# 内容

[AWS re:Invent 2024 - Dive into the depths of routing on AWS (NET318)](https://www.youtube.com/watch?v=2tHMnbTj4pw)を見ていてGateway Load Balanceで分かりやすい記述があったため、備忘録として記載します。

VPCのルーティングテーブルで送信先とNextHopを定義する場面を考えます。NextHopにTransit Gatewayを指定することでTransit Gatewayアタッチメントにルーティングされます。この場合、Transit Gatewayはマネージドサービスのため、NextHopの冗長性を考える必要はありません。NAT GatewayやInternet Gatetwayなど他のマネージドサービスをNextHopにする場合も同様です。

![スライド1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2523652/f98ef97b-6616-f42f-7e81-3b403d64ace7.png)

NextHopがEC2で構成されたアプライアンス製品の場合を考えてみます。この場合、NextHopはEC2にアタッチしたElastic Network Interface（ENI）をターゲットとします。

![スライド2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2523652/6d7161c0-d882-4a2c-5a75-fce3280ff9d1.png)

しかし、EC2が障害で停止した場合、新しいEC2にENIの付け替え処理が必要になりダウンタイムが発生してしまいます。

![スライド3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2523652/9da642cb-87bb-7989-9e13-213332e88dfa.png)

このような場合、Gateway Load Balancerの使用が選択肢になります。GLBを作成することで作成されるEndpointをターゲットとすることで上記の問題を解決することが出来ます。左側のEC2からのパケットはGLBでルーティングされ右側のEC2（アプライアンス製品）に通信します。障害で停止したEC2がある場合、GLBは接続可能なEC2にルーティングします。

![スライド4.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2523652/17ec0ffc-5986-c06b-3f0a-3e4594012a4e.png)
｢動きそう｣なデザインにワクワク感はないよって話。

## デザインの重要性を考える ― オリジナルプロダクトの学び

### 背景
現在参加中のApprenticeshipにて、オリジナルプロダクトの作成に着手しました。
要件定義から設計までを2週間かけて行う中で、改めてデザインの重要性を思い知らされました。
ただ動くだけのプロダクトでは、ユーザーの心を掴むことはできません。

この記事では、「動きそうなデザイン」と「触りたくなるデザイン」の違いについて考えたことを共有しようかなと。

---

### 動きそうなデザイン: 悪い例

プロダクト開発の初期、私は次のようなデザインを作っていました。
以前チーム開発で作成したものを流用していたのですが、改めて見てみてもまあ悲惨。

- **無機質なボタン**: 装飾に具体的な意図がなく、統一感がない。
- **混乱を生むUI**: 配置がバラバラで、どこを操作すれば良いか直感的に分からない。

一見すると「動く」デザインではありましたが、ユーザーにとっては魅力的ではありません。ボタンを押すのが億劫だったり、どの機能を使えばいいのか迷ってしまいます。

---

### 触りたくなるデザイン: 良い例

今回の開発を通じて、「触りたくなるデザイン」を実現するために学んだことがいくつかあります。その中で特に重要だったのが、次の3つのポイントです。

- **良いデザインの模倣をためらわない**: 限られた時間で質の高いデザインを実現するには、一人の力では限界があります。類似するサイトや既存の優れたデザインから積極的に学び、取り入れることが鍵だと気づきました。
特にデザインを専門的に学んだことのない人がオリジナルで作るデザインははっきり言ってダサいことが多いそうな。良いものはどんどん取り入れましょう。

- **デザインに意味を持たせる**: 色彩やボタンの角の丸み一つ一つにも意味を込めることが大切です。例えば、青色は信頼感を与え、丸みを帯びたデザインは親しみやすさを演出します。実際に様々なサイトを見てみても、ほとんどのアイコンやボタンは丸みを帯びてデザインされています。

- **使う色の数を絞る**: デザイン全体で使用する色の数を限定することで、統一感が生まれ、視認性が向上します。多くのサイトが3色程度の配色に留めているのは、これが理由です。

#### 改善したデザイン例

改善後のデザインでは、次の点に注力しました。

- 黒と赤を貴重にしていたデザインを白と青系統に設定し直し、信頼感を与える。
- ボタンの角を適度に丸くして、親しみやすさを演出。また類似した役割のボタンの角の大きさを統一。
- 配色を絞り、統一感を持たせる。

これにより、デザインの一つ一つに意味を持たせたことで、ユーザーが「触れてみたい」と感じるプロダクトに進化しました。

---

### 学び

デザインは単なる「装飾」ではなく、ユーザーとの「対話」です。良いデザインを模倣する勇気と、一つ一つの要素に意味を持たせる意識が、プロダクトを進化させます。これを意識することで、次の3つの要素が改善されると学びました。(3つ目に関しては今後の課題)

1. **使いやすさ**: 誰でも直感的に操作できるか。
2. **美しさ**: 見た目が魅力的であるか。
3. **反応性**: 操作に対して適切なフィードバックがあるか。

---

### まとめ

プロダクトが「動くだけ」で満足してはいけません。ユーザーが「触りたい」「使いたい」と感じるようなデザインを追求することが、プロダクト成功の鍵だと実感しました。

これからプロダクト開発をする方にとって、この学びが少しでも役立てば嬉しいです。
また)Arduino IDEにSTM32を登録して遊ぶ。


参考

![o_coq707.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/cddb08bb-00e3-1372-f663-ea21f6c886f7.jpeg)


https://github.com/stm32duino/Arduino_Core_STM32

x 過去ログを見よ!!!


目的
ふたたびSTM32で遊ぶ
M5StackのSTM32F030が気になるので
環境構築を思い出す


● GithubからSTM32用のアドレスを取ってくる(参考を参照)
----

```

https://github.com/stm32duino/BoardManagerFiles/raw/main/package_stmicroelectronics_index.json

```


● Arduino IDEの設定にアドレスを登録する
----

![o_coq708.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/544b50a1-4b0c-918f-28e2-1d8bcdc7677e.jpeg)

![o_coq709.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/dc2c2244-6d03-81b3-e8f5-a4b616aebb0d.jpeg)

![o_coq711.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/029c88ec-f1b7-b4ed-3ddc-645a93c6eb64.jpeg)




● ボードを選択する
----

![o_coq712.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/0792c9bb-29d9-6e2c-e37b-64af957ded57.jpeg)

![o_coq713.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/ae2852d3-c058-de41-3bf8-779bb25e2e3b.jpeg)



● 仮に秋月で売っているSTM32C011(8ピン)を選択する
----

![o_coq714.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/11aa4b8a-a71d-f35c-a2b1-55aea8e34b85.jpeg)


![o_coq715.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/e2450e62-f35e-d254-9672-608f77297edc.jpeg)


![o_coq716.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/bb08d9ce-b470-d9dd-3d90-29ff1a2dae5d.jpeg)
AWS Amplify Gen2でNext.js SSRをデプロイするチュートリアルをやってみてハマったところ

## はじめに

Amplify + React Native で構築されたプロダクトで React Native を React (Next.js) へリプレイスすることになったんですが、そのプロダクト的にSEOが外せない要件だったので、Amplify でSSRをどうすればできるか調べました。
以下の公式チュートリアルで簡単にSSRのデプロイ環境が作れるようだったので試しました。(Amplify Hostingというもの)

その際ハマったポイントをメモしておきます。

https://docs.amplify.aws/nextjs/start/quickstart/nextjs-app-router-client-components

### 参考 (結果的に今回と関係なかった)

SSR = サーバーが必要 = ECSを建てる? と思って以下の記事を参考にしようとしていましたが、その後Amplify HostingがSSRをサポートしたとのことで、こんな大掛かりな対応は必要ないみたいでした。

https://dev.classmethod.jp/articles/amplify-cli-containerize/

## CDKToolkit のエラー

チュートリアルの通りデプロイを開始したところ、以下のエラーですぐ止まってしまいました。

![ScreenShot 2024-12-29 0.36.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245142/6fefbca3-0db1-7e71-c64f-bb564cfdde6f.png)

```sh
Stack:arn:aws:cloudformation:{AWS_REGION}:{ACCOUNT_ID}:stack/CDKToolkit/xxxx is in UPDATE_ROLLBACK_FAILED state and can not be updated
```

![ScreenShot 2024-12-30 0.03.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245142/c5007c11-92e9-d0c3-9327-4740f0aae99d.png)

どうも2年ぐらい前にAWS CDKの学習の際に作られていたCloudFormationが悪さしていたのようなので削除してみたら解消しました。(その際 `UPDATE_ROLLBACK_FAILED` になったまま放置していたのかも...)

## 権限不足のエラー

この後発生したのがIAMの権限不足のエラーでした。(ログ残し忘れた...)
以下の記事と同様のエラーだったと思います。

https://dev.classmethod.jp/articles/tsnote-amplify-when-using-codecommit-with-accurately-poweruseraccess-gives-an-error-please-tell-me-the-solution/

記事と同様、実行ユーザーの権限が `PowerUserAccess` だったので、権限の追加が必要だったようです。
色々権限が必要なようだったので、一時的に `AdministratorAccess` を付与して対応しました。

ここまでの対応でデプロイ成功しました！

## おまけ: `BootstrapNotDetectedError`

その後、検証がてら試行錯誤する中で何度もAmplifyのコンソール上でアプリの削除、再作成を行ったのですが、デプロイ時に `BootstrapNotDetectedError` が発生するようになってしまいました。

https://dev.classmethod.jp/articles/tsnote-amplify-cdk-bootstrap-error/

エラーメッセージの通り、以下を実行で解決しそうですが、最初のアプリケーション作成時はそれをやらなくてもデプロイ成功したのになんで?と思いました。
(当たり前といえば当たり前ですが裏側で AWS CDK が使用されてるんですね)

```sh
cdk bootstrap aws://{ACCOUNT_ID}/{AWS_REGION}
```

Amplify のコンソール画面でデプロイ前に以下のような注意書きが一瞬ちらついていて、そういえば最初はこの注意書きが出ていたなと思いました。

![ScreenShot 2024-12-30 2.56.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245142/6eef080d-3d55-d9eb-9c5d-27b500555e4e.png)

何かデータで状態保存しているのだろうと調べてみたところ、パラメーターストアに `/cdk-bootstrap/xxxx/version` のように値が保持されていました。

![ScreenShot 2024-12-30 5.18.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245142/e777d986-385e-8f6f-61fc-4f7da9ab73fe.png)

これを削除して再度アプリを新規作成してみたところ、前述の注意書きが表示されるようになりました。

Amplify はパラメーターストアも使用しているのか。

## おわりに

Amplify はアプリ開発者が手軽にインフラ構築できるものとのことですが、ちょこちょこハマるポイントはありそうで調べ始めると結局色々踏み込むことになりそうだな、と思いました。
Next.js はこれから勉強しようと思ってたところなので、簡単にデプロイできるのは助かるし(Vercelの方が簡単なのかもですが、AWSサービスと連携するには便利そう)、使いこなせると面白いサービスかなと思いました。
Broadcom - VMware Workstation Pro のダウンロード

# Broadcom アカウントの作成

**注意点**

どうやら、最後ダウンロードするときに「Company」という項目があり、メールアドレスのドメイン名から自動判別している様子
そのため、*@outlook.jp などでは、正常に読み込めない。

会社のメールアドレスを使うしかないのかな？
Power Query へそのゴマ　100本ノック　解答　１０

**91. コード補完問題**  
**問題**: "Sales"を昇順にソート  
```m
{"Amount", ___}
```

**解答**: `Order.Ascending`

**解説**:  
昇順は`Order.Ascending`。

------------------------------------------------------------
**92. 5択問題**  
**問題**: null値チェック  
A.= null B.== null C.equals null D.<> null E.is null

**解答**: A. = null

**解説**:  
M言語はnull判定に`= null`や`<> null`を直接使えます。  
問題文「null値のチェックをする場合」→最も基本的なのは`= null`です。

------------------------------------------------------------
**93. コード補完問題**  
**問題**: "Sales"列の最大値  
```m
List.Max(Table.Column(Source, "___"))
```

**解答**: `Sales`

**解説**:  
`Table.Column(Source, "Sales")`でSales列をリスト化、`List.Max`で最大値取得。

------------------------------------------------------------
**94. 5択問題**  
**問題**: `Date.EndOfMonth(#date(2020,1,15))`は？  
2020年1月の最終日は31日

**解答**: B. #date(2020,1,31)

**解説**:  
EndOfMonthはその月の最終日付を返します。

------------------------------------------------------------
**95. コード補完問題**  
**問題**: "Name"列の前後空白除去  
```m
Text.Trim([___])
```

**解答**: `Name`

**解説**:  
`Text.Trim([Name])`で前後の空白を取り除きます。

------------------------------------------------------------
**96. 5択問題**  
**問題**: `Duration.Days(#duration(2,0,0,0))`  
#duration(2,0,0,0)は2日間

**解答**: B. 2

**解説**:  
Duration.Daysはduration値の日数部分を返し、2日間なので2。

------------------------------------------------------------
**97. コード補完問題**  
**問題**: "Value"を小数点以下2桁に丸める  
```m
Number.Round([Value], ___)
```

**解答**: `2`

**解説**:  
`Number.Round(number, digits)`で指定桁数に丸め、2桁にしたい場合は`2`。

------------------------------------------------------------
**98. 5択問題**  
**問題**: `Text.Reverse("ABC")`は？  
A."CBA" B."ABC" ...

**解答**: A. "CBA"

**解説**:  
Text.Reverseは文字列を逆順にします。

------------------------------------------------------------
**99. コード補完問題**  
**問題**: "Sales"合計結果列の型指定  
```m
type ___
```

**解答**: `number`

**解説**:  
集計結果をnumber型に指定するため `type number` を使用します。

------------------------------------------------------------
**100. 5択問題**  
**問題**: 関数定義構文  
A. function(args) => expression

**解答**: A. function(args) => expression

**解説**:  
M言語で関数は `function (引数) => 式` の形式で定義します。
Power Query へそのゴマ　100本ノック　解答　９

**81. コード補完問題**  
**問題**: "Description"列の文字数  
```m
Text.Length([___])
```

**解答**: `Description`

**解説**:  
`Text.Length([Description])`で文字数を取得。

------------------------------------------------------------
**82. 5択問題**  
**問題**: `Table.UnpivotOtherColumns`は何を行うか？  
A. 指定した列以外の列をピボット解除

**解答**: A. 指定した列以外の列をピボット解除

**解説**:  
`Table.UnpivotOtherColumns`は指定した列以外を行へ展開してピボット解除します。

------------------------------------------------------------
**83. コード補完問題**  
**問題**: Priceがnullなら0、でなければPrice  
```m
if [Price] = null then 0 else [___]
```

**解答**: `Price`

**解説**:  
`if [Price] = null then 0 else [Price]`

------------------------------------------------------------
**84. 5択問題**  
**問題**: `Number.Mod(10,3)`は？  
A.1 B.3 C.10 D.0.333... E.エラー

**解答**: A. 1

**解説**:  
10を3で割った余りは1です。

------------------------------------------------------------
**85. コード補完問題**  
**問題**: 最初の10行のみ取得  
```m
Table.FirstN(Source, ___)
```

**解答**: `10`

**解説**:  
`Table.FirstN(table, 10)`で先頭10行を取得。

------------------------------------------------------------
**86. 5択問題**  
**問題**: `List.Distinct({1,2,2,3})`は？  
A.{1,2,2,3} B.{1,2,3} C.{2,3} D.{1,3} E.{1,1,2,3}

**解答**: B. {1,2,3}

**解説**:  
List.Distinctは重複を除いて{1,2,3}となります。

------------------------------------------------------------
**87. コード補完問題**  
**問題**: Priceの10%は`[Price]*0.___`
```m
[Price] * 0.___
```

**解答**: `1` ではなく0.1を表すので `0.1`

**解説**:  
10% = 0.1です。

------------------------------------------------------------
**88. 5択問題**  
**問題**: 型なし文字列"A"  
A.'A' B."A" C.#A D.A E."""A"""

**解答**: B. "A"

**解説**:  
M言語で文字列はダブルクォートで囲みます。

------------------------------------------------------------
**89. コード補完問題**  
**問題**: "Data"テーブルからレコードのリスト取得  
```m
Table.ToRecords(___)
```

**解答**: `Source`

**解説**:  
`Table.ToRecords(Source)`で各行をレコードとしたリストになります。

------------------------------------------------------------
**90. 5択問題**  
**問題**: `Text.PositionOf("ABC","B")`は？  
A.0 B.1 C.2 D.-1 E.null

**解答**: B. 1

**解説**:  
"A"が0インデックス、"B"は1番目なので1。
Power Query へそのゴマ　100本ノック　解答　８

**71. コード補完問題**  
**問題**: 月名取得にはDate.MonthName  
```m
each Date.___([Date])
```

**解答**: `MonthName`

**解説**:  
`Date.MonthName(date)`で月名(英語)が取得できる。

------------------------------------------------------------
**72. 5択問題**  
**問題**: `Table.ToRecords`は？  
A. テーブルをレコードのリストに変換

**解答**: A. テーブルをレコードのリストに変換

**解説**:  
`Table.ToRecords(table)`は各行を1レコードとするレコードのリストに変換します。

------------------------------------------------------------
**73. コード補完問題**  
**問題**: Category = "Fruit"のみ残す  
```m
[Category] = "___"
```

**解答**: `Fruit`

**解説**:  
`[Category] = "Fruit"`で"Fruit"のみ抽出。

------------------------------------------------------------
**74. 5択問題**  
**問題**: `Number.RoundDown(1.9)`は？  
A.1.9 B.2 C.1 D.0 E.-1

**解答**: C. 1

**解説**:  
RoundDownは常に下方向へ切り捨て、1.9 → 1。

------------------------------------------------------------
**75. コード補完問題**  
**問題**: "Price"列を整数型  
```m
{"Price", ___}
```

**解答**: `Int64.Type` または `Int32.Type` （一般的には `Int64.Type`）

**解説**:  
整数型は `Int64.Type` がよく使われます。

------------------------------------------------------------
**76. 5択問題**  
**問題**: `Text.Combine({"A","B","C"}, ";")`は？  
A."ABC" B."A;B;C" C.{"A;B;C"} D."A,B,C" E."A;B","C"

**解答**: B. "A;B;C"

**解説**:  
Text.Combineはリストの要素を区切り文字で連結した1つの文字列を返します。

------------------------------------------------------------
**77. コード補完問題**  
**問題**: "Sales"列の最小値  
```m
List.Min(Table.Column(Source, "___"))
```

**解答**: `Sales`

**解説**:  
`Table.Column(Source, "Sales")`でSales列のリストを取得、List.Minで最小値取得。

------------------------------------------------------------
**78. 5択問題**  
**問題**: 繰り返し処理に主に使われるのは？  
A.for B.while C.List.Generate D.do...while E.goto

**解答**: C. List.Generate

**解説**:  
M言語にfor/while構文はなく、繰り返しは`List.Generate`などの関数で行います。

------------------------------------------------------------
**79. コード補完問題**  
**問題**: "Flag"列がtrueの行のみ  
```m
[Flag] = ___
```

**解答**: `true`

**解説**:  
`[Flag] = true`でFlagがtrueの行のみ抽出。

------------------------------------------------------------
**80. 5択問題**  
**問題**: 日付リテラル記法  
A.date(2020,1,1)  
B.#date(2020,1,1)  
C."2020-01-01"  
D.Date(2020,1,1)  
E.#datetime(2020,1,1)

**解答**: B. #date(2020,1,1)

**解説**:  
M言語で日付リテラルは#date(年,月,日)です。
Power Query へそのゴマ　100本ノック　解答　７

**61. コード補完問題**  
**問題**: "Country"と"City"列のみを残す  
```m
{"Country", "___"}
```

**解答**: `City`

**解説**:  
`Table.SelectColumns(Source, {"Country", "City"})`

------------------------------------------------------------
**62. 5択問題**  
**問題**: Table.Pivotでピボットに使用する列を指定する引数は？  
A. 第1引数  
B. 第2引数  
C. 第3引数  
D. 第4引数  
E. 別の関数

**解答**: B. 第2引数

**解説**:  
`Table.Pivot(table, pivotColumn, valueColumnFunction)`で第2引数がピボット列です。

------------------------------------------------------------
**63. コード補完問題**  
**問題**: "Date"列で降順ソート  
```m
{"Date", Order.___}
```

**解答**: `Descending`

**解説**:  
降順は`Order.Descending`。

------------------------------------------------------------
**64. 5択問題**  
**問題**: `Number.Round(1.2345, 2)`は何を返すか？  
A. 1.23  
B. 1.24  
C. 1.2  
D. 1  
E. 2

**解答**: B. 1.24

**解説**:  
1.2345を小数点以下2桁で丸めると1.23ではなく最も近い2桁で1.23…4五入で1.23からさらに四捨五入で1.23 → 1.23(4以下は切り捨て?)  
※1.2345を四捨五入(標準の丸め)では1.23になるはずと思うが、M言語のNumber.Roundは "Banker's rounding"を行う場合があります。  
標準ラウンドでは1.2345は1.23に丸められます。  
Power Queryの標準動作: Number.Roundはデフォルトで最近接偶数へ丸める(Banker's rounding)をします。1.2345は1.23と1.235の中間。偶数側へ丸めると1.23（2の後が偶数）。よって正確には1.23が正解と思われます。  
問題文上選択肢は1.23か1.24で迷いますが、"4"は最後の桁→1.2345×100=123.45 →四捨五入で123→1.23です。  
選択肢Bが1.24、Aが1.23、より正確にはA. 1.23が正解です。  
(ここは微妙な点: 小数点第三位が4なので四捨五入なら1.23が正しい。従って答えはA. 1.23)

**正解**: A. 1.23

**解説**:  
Number.Roundは(標準四捨五入時)1.2345 → 1.23になります。

------------------------------------------------------------
**65. コード補完問題**  
**問題**: "Date"列をリスト化  
```m
Dates = Table.Column(Source, "___")
```

**解答**: `Date`

**解説**:  
`Table.Column(table, "Date")`で"Date"列をリストとして取得。

------------------------------------------------------------
**66. 5択問題**  
**問題**: `Text.Length("ABC")`は？  
A.1 B.2 C.3 D.0 E.null

**解答**: C. 3

**解説**:  
"ABC"は3文字なので3。

------------------------------------------------------------
**67. コード補完問題**  
**問題**: "Name"列を小文字  
```m
each Text.___([Name])
```

**解答**: `Lower`

**解説**:  
`Text.Lower([Name])`で小文字に変換します。

------------------------------------------------------------
**68. 5択問題**  
**問題**: `Table.Transpose`関数は何を行うか？  
A.90度回転  
B.行列を入れ替える  
C.別形式エクスポート  
D.テーブル→リスト  
E.ピボットテーブル化

**解答**: B. テーブルの行と列を入れ替える

**解説**:  
Transposeは行列転置を行います。

------------------------------------------------------------
**69. コード補完問題**  
**問題**: "QuantityPlusOne"列 = Quantity + 1  
```m
[Quantity] + ___
```

**解答**: `1`

**解説**:  
[Quantity] + 1で1加算します。

------------------------------------------------------------
**70. 5択問題**  
**問題**: `#"Previous Step"`参照方法  
A. #"Previous Step"

**解答**: A. #"Previous Step"

**解説**:  
ステップ名が空白含む場合`#"Step Name"`で参照。
Power Query へそのゴマ　100本ノック　解答　６

**51. コード補完問題**  
**問題**: Price > 100ならtrue、そうでなければfalse  
```m
if [Price] > 100 then true else ___
```

**解答**: `false`

**解説**:  
条件式のelse部にはfalseを指定します。

------------------------------------------------------------
**52. 5択問題**  
**問題**: 論理AND演算子  
A. &&  
B. AND  
C. and  
D. &  
E. ||

**解答**: C. and

**解説**:  
M言語では論理ANDは `and` 、ORは `or` です。

------------------------------------------------------------
**53. コード補完問題**  
**問題**: "Name"列を大文字化  
```m
each Text.___([Name])
```

**解答**: `Upper`

**解説**:  
`Text.Upper([Name])`で文字列を大文字にします。

------------------------------------------------------------
**54. 5択問題**  
**問題**: `Table.RemoveColumns`関数の第2引数には何を渡すか？  
A. 列を変換する関数  
B. 列名のリスト  
C. 列のフィルタ条件  
D. 削除する行番号  
E. 新規列名

**解答**: B. 列名のリスト

**解説**:  
`Table.RemoveColumns(table, {"ColumnName1", "ColumnName2"})` のように列名リストを渡します。

------------------------------------------------------------
**55. コード補完問題**  
**問題**: Categoryでグループ化し、Amount列合計を"TotalAmount"として計算  
```m
each List.Sum([___])
```

**解答**: `Amount`

**解説**:  
グループ行内の"Amount"列値のリストに対してList.Sumで合計します。

------------------------------------------------------------
**56. 5択問題**  
**問題**: リストを逆順にする関数  
A. List.Sort  
B. List.Reverse  
C. List.Flip  
D. List.Rotate  
E. List.Invert

**解答**: B. List.Reverse

**解説**:  
`List.Reverse(list)`でリストを逆順にします。

------------------------------------------------------------
**57. コード補完問題**  
**問題**: "Date"列が2021/12/31より後の日付  
```m
[Date] > #date(___,12,31)
```

**解答**: `2021`

**解説**:  
`[Date] > #date(2021,12,31)`で2021年12月31日より後の日付をフィルタ。

------------------------------------------------------------
**58. 5択問題**  
**問題**: `Number.Abs(-10)`は何を返すか？  
A. -10  
B. 10  
C. 0  
D. null  
E. エラー

**解答**: B. 10

**解説**:  
Absolute値関数Number.Abs(-10) = 10です。

------------------------------------------------------------
**59. コード補完問題**  
**問題**: Date.Year([OrderDate])で年取得  
```m
Date.Year([___])
```

**解答**: `OrderDate`

**解説**:  
Date.Year([OrderDate])でOrderDate列の日付から年を取得します。

------------------------------------------------------------
**60. 5択問題**  
**問題**: `#shared`とは？  
A. 利用可能な関数や値を含むレコード

**解答**: A. 現在のM環境で利用可能な関数、定数、値を含むレコード

**解説**:  
`#shared`はM言語で使用可能な機能一覧（関数、定数）を格納した特殊なレコードです。
Power Query へそのゴマ　100本ノック　解答　５

**41. コード補完問題**  
**問題**: "OldPrice"列を"NewPrice"列名に変更  
```m
Table.RenameColumns(Source, {{"OldPrice","___"}})
```

**解答**: `NewPrice`

**解説**:  
`Table.RenameColumns`で列名ペアを指定します。

------------------------------------------------------------
**42. 5択問題**  
**問題**: `#"Step Name"`のような表記は何を表すか？  
A. ステップ名に空白や特殊文字がある場合の参照

**解答**: A. ステップ名に空白や特殊文字が含まれる場合のリテラル表記

**解説**:  
`#"Step Name"`のように#" "で囲むとスペースなどを含む名前を参照できます。

------------------------------------------------------------
**43. コード補完問題**  
**問題**: `Table.ReorderColumns`で列順序を `{ "Col1", "Col2", "Col3" }` のような`___`で指定  
```m
Table.ReorderColumns(Source, ___)
```

**解答**: `{ "Col1", "Col2", "Col3" }`

**解説**:  
列順序はリストで指定します。`{}`でリストを作ります。

------------------------------------------------------------
**44. 5択問題**  
**問題**: テキストを大文字に変換する関数  
A. Text.Upper

**解答**: A. Text.Upper

**解説**:  
`Text.Upper("abc")` -> "ABC"

------------------------------------------------------------
**45. コード補完問題**  
**問題**: [ID]が{1,3,5}に含まれる行抽出  
```m
List.Contains({1,3,5}, [___])
```

**解答**: `ID`

**解説**:  
`List.Contains({1,3,5}, [ID])`でID列が1,3,5のいずれかである行を抽出します。

------------------------------------------------------------
**46. 5択問題**  
**問題**: `Table.FillDown`は何を行うか？  
A. 上のセルから下方向へ値を埋める

**解答**: A. 上のセルから下方向へ値を埋める

**解説**:  
`Table.FillDown`は上の行の値を下方向にコピーします。

------------------------------------------------------------
**47. コード補完問題**  
**問題**: 全列をテキスト型に変更する場合  
`type ___`を補完  
```m
type text
```

**解答**: `text`

**解説**:  
M言語でテキスト型は`type text`です。

------------------------------------------------------------
**48. 5択問題**  
**問題**: `Record.ToTable`は何を行うか？  
A. レコードをテーブルに変換する

**解答**: A. レコードをテーブルに変換

**解説**:  
`Record.ToTable(record)`はレコードを二列構成（Name, Value）のテーブルに変換します。

------------------------------------------------------------
**49. コード補完問題**  
**問題**: 行インデックス1の行を取得  
Table.Rowは0-based  
```m
Table.Row(Source, ___)
```

**解答**: `1`

**解説**:  
行インデックス0が1行目なので、インデックス1は2行目にあたります。

------------------------------------------------------------
**50. 5択問題**  
**問題**: `Text.Split("A,B,C", ",")`の結果  
A. {"A,B,C"}  
B. {"A","B","C"}  
C. ["A","B","C"]  
D. ("A","B","C")  
E. {{"A","B","C"}}

**解答**: B. {"A","B","C"}

**解説**:  
`Text.Split`は区切り文字で分割し、リストを返します。
Power Query へそのゴマ　100本ノック　解答　４

**31. コード補完問題**  
**問題**: テーブルの行数取得  
```m
RowCount = Table.RowCount(___)
```

**解答**: `Source`

**解説**:  
`Table.RowCount(table)`で指定テーブルの行数を返します。

------------------------------------------------------------
**32. 5択問題**  
**問題**: `Record.Field`関数は何をするか？  
A. レコードから指定フィールドの値を取り出す

**解答**: A. レコードから指定したフィールドの値を取り出す

**解説**:  
`Record.Field(record, "FieldName")`でレコードから特定のフィールド値を取得します。

------------------------------------------------------------
**33. コード補完問題**  
**問題**: "Quantity">20なら"High"、それ以外"Low"  
```m
if [Quantity] > 20 then "High" else "___"
```

**解答**: `"Low"`

**解説**:  
条件分岐でelse部に"Low"を指定します。

------------------------------------------------------------
**34. 5択問題**  
**問題**: `List.Contains({1,2,3},2)`は？  
A. 1  
B. 2  
C. true  
D. false  
E. null

**解答**: C. true

**解説**:  
リスト{1,2,3}に2は含まれるためtrueを返します。

------------------------------------------------------------
**35. コード補完問題**  
**問題**: 重複行削除  
```m
Table.Distinct(___)
```

**解答**: `Source`

**解説**:  
`Table.Distinct(table)`で重複行を排除したテーブルを返します。

------------------------------------------------------------
**36. 5択問題**  
**問題**: `Table.AddIndexColumn`は何をするか？  
A. テーブルに順序インデックス列を追加

**解答**: A. テーブルに順序インデックス列を追加する

**解説**:  
`Table.AddIndexColumn`は0から始まるインデックス列を追加します。

------------------------------------------------------------
**37. コード補完問題**  
**問題**: "Name"列が"A"で始まる行抽出  
```m
Text.StartsWith([___],"A")
```

**解答**: `Name`

**解説**:  
`Text.StartsWith([Name], "A")`で"Name"列が"A"で始まるかチェックします。

------------------------------------------------------------
**38. 5択問題**  
**問題**: リストの要素数を求める関数  
A. List.Count  
B. List.Length  
C. List.Size  
D. List.Number  
E. List.Rows

**解答**: A. List.Count

**解説**:  
`List.Count(list)`でリストの要素数が取得できます。

------------------------------------------------------------
**39. コード補完問題**  
**問題**: "Date"列が #date(2020,1,1) と等しい行  
```m
[Date] = #date(___,1,1)
```

**解答**: `2020`

**解説**:  
`[Date] = #date(2020,1,1)`で 2020/1/1 と等しい行を抽出します。

------------------------------------------------------------
**40. 5択問題**  
**問題**: 日時型を表す型は？  
A. type datetime

**解答**: A. type datetime

**解説**:  
type datetime で日付と時刻を表す型です。
Power Query へそのゴマ　100本ノック　解答　３

**21. コード補完問題**  
**問題**: "Category"列のリスト取得  
```m
CategoryList = Table.Column(Source, "___")
```

**解答**: `Category`

**解説**:  
`Table.Column(table, "ColumnName")`で指定列の値をリストで取得します。

------------------------------------------------------------
**22. 5択問題**  
**問題**: "列のピボット解除"を行う関数  
A. Table.Pivot  
B. Table.UnpivotOtherColumns  
C. Table.UnpivotColumns  
D. Table.Transpose  
E. Table.ExpandTableColumn

**解答**: C. Table.UnpivotColumns もしくは B. Table.UnpivotOtherColumns  
（問題が紛らわしいですが、「列のピボット解除」は"Unpivot"がキーワード。）  
"列のピボット解除"は `Table.UnpivotColumns`または`Table.UnpivotOtherColumns`を使用しますが、単純に"列のピボット解除"といえばCの `Table.UnpivotColumns` がより直接的です。

**解説**:  
`Table.UnpivotColumns`は選択した列を行方向に展開してピボット解除します。  
`Table.UnpivotOtherColumns`は指定しなかった列以外をピボット解除します。  
ここでは「適切なもの」として`Table.UnpivotColumns`が代表的です。

------------------------------------------------------------
**23. コード補完問題**  
**問題**: 昇順ソートを表す値  
```m
{"Date", ___}
```

**解答**: `Order.Ascending`

**解説**:  
Order.Ascendingで昇順、Order.Descendingで降順を表します。

------------------------------------------------------------
**24. 5択問題**  
**問題**: `DateTime.LocalNow()`が返す値  
A. 現在の日付のみ  
B. 現在のUTC時刻のみ  
C. 現在の日付と時刻（ローカル）  
D. 今日の午前0時  
E. Excelシリアル値形式の日付

**解答**: C. 現在の日付と時刻（ローカル）

**解説**:  
`DateTime.LocalNow()`は現在のローカル日時を返します。

------------------------------------------------------------
**25. コード補完問題**  
**問題**: Price列を10%割引 (`[Price]*0.9`)  
```m
Transformed = Table.TransformColumns(Source, {{"Price", each ___}})
```

**解答**: `[Price] * 0.9`

**解説**:  
`each [Price] * 0.9` でPrice列の値を10%引きした値に変換します。

------------------------------------------------------------
**26. 5択問題**  
**問題**: `Table.ToList`はどう変換するか？  
A. テーブルを縦方向に連結したリスト  
B. テーブルのすべての列を連結したリスト  
C. 単一列テーブルをリストに変換  
D. テーブルをキーと値のペアのリスト  
E. テーブルを階層構造のリストに

**解答**: C. 単一列テーブルをリストに変換

**解説**:  
`Table.ToList(table)`はテーブルが1列である場合、その列をリストに変換します。

------------------------------------------------------------
**27. コード補完問題**  
**問題**: "FullName"列 = FirstName + " " + LastName  
```m
[FirstName] & " " & [___]
```

**解答**: `LastName`

**解説**:  
文字列連結で `&` を使い、[FirstName]と[LastName]を連結します。

------------------------------------------------------------
**28. 5択問題**  
**問題**: 条件分岐構造は？  
A. select ... case  
B. if ... then ... else  
C. switch ... case  
D. when ... do  
E. choose ... option

**解答**: B. if ... then ... else

**解説**:  
M言語で条件分岐は`if 条件 then 値 else 値`です。

------------------------------------------------------------
**29. コード補完問題**  
**問題**: Number.Roundを使う  
```m
each Number.___([Score],0)
```

**解答**: `Round`

**解説**:  
`Number.Round(number, digits)`は値を指定桁数で四捨五入します。

------------------------------------------------------------
**30. 5択問題**  
**問題**: 日付部分を抽出するための関数  
A. Time.Day  
B. Date.MonthName  
C. Date.Day  
D. Duration.Days  
E. DateTime.Year

**解答**: C. Date.Day

**解説**:  
`Date.Day(date)`で日付から日の部分を抽出します。
Power Query へそのゴマ　100本ノック　解答　２

**11. コード補完問題**  
**問題**: "Quantity"が null の行を削除  
```m
RemovedNulls = Table.SelectRows(Source, each ___([Quantity]))
```
ヒント: nullでないことをチェックするには `<> null` を使用。

**解答**: `[Quantity] <> null`

**解説**:  
`[Quantity] <> null` で Quantity 列が null でない行のみ抽出します。

------------------------------------------------------------
**12. 5択問題**  
**問題**: `Table.Combine`関数の目的は何か？  
A. テーブルを列方向に展開  
B. 複数のテーブルを1つのテーブルに結合  
C. テーブルをJSONに変換  
D. テーブルをトランスポーズ  
E. テーブルを行方向に分割

**解答**: B. 複数のテーブルを1つのテーブルに結合

**解説**:  
`Table.Combine`は複数テーブルを垂直方向（行方向）に結合します。

------------------------------------------------------------
**13. コード補完問題**  
**問題**: "Product"列のみを残す  
```m
Selected = Table.SelectColumns(Source, {"___"})
```

**解答**: `"Product"`

**解説**:  
`Table.SelectColumns`に残したい列名のリストを渡します。{"Product"}で"Product"列のみを残します。

------------------------------------------------------------
**14. 5択問題**  
**問題**: `Table.Sort`関数の第2引数には何を指定するか？  
A. ソートキーとソート順を含むリスト  
B. テーブル名  
C. カラムを追加する関数  
D. セルのフォーマット条件  
E. 行数制限値

**解答**: A. ソートキーとソート順を含むリスト

**解説**:  
`Table.Sort(table, {{"ColumnName", Order.Ascending}})`のように、列名と並べ替え順序をペアにしたリストを指定します。

------------------------------------------------------------
**15. コード補完問題**  
**問題**: 月を取得するDate関数補完  
```m
MonthColumn = Table.AddColumn(YearColumn, "Month", each Date.___([Date]))
```

**解答**: `Date.Month`

**解説**:  
`Date.Month(date)`は日付から月を取得します。

------------------------------------------------------------
**16. 5択問題**  
**問題**: M言語でコメントを表す記号  
A. //  
B. #  
C. --  
D. /* */  
E. '

**解答**: A. //

**解説**:  
M言語で1行コメントは `//` を使用します。

------------------------------------------------------------
**17. コード補完問題**  
**問題**: "UnitPrice" * "Quantity" = "Total"列  
```m
each [UnitPrice] * [___]
```

**解答**: `Quantity`

**解説**:  
"Quantity"列を参照するため `[Quantity]` で掛け算します。

------------------------------------------------------------
**18. 5択問題**  
**問題**: `Table.TransformColumnTypes`関数は何をするか？  
A. テーブルをグループ化  
B. 値変換  
C. 指定列のデータ型を変更  
D. 列名を変更  
E. テーブルを結合

**解答**: C. 指定した列のデータ型を変更する

**解説**:  
`Table.TransformColumnTypes`は列のデータ型(型)を変更します。

------------------------------------------------------------
**19. コード補完問題**  
**問題**: "Sales"列が50以下の行抽出  
```m
[Sales] <= ___
```

**解答**: `50`

**解説**:  
`[Sales] <= 50` で50以下の行を抽出できます。

------------------------------------------------------------
**20. 5択問題**  
**問題**: M言語でリストを作成する記号  
A. ()  
B. {}  
C. []  
D. ""  
E. <>

**解答**: B. {}

**解説**:  
M言語では `{}` でリストを表します。例: `{1,2,3}`。
Power Query へそのゴマ　100本ノック　１０

**91. コード補完問題**  
"Data"テーブルで"Amount"列を昇順にソートするには `Table.Sort(Source, {{"Amount", ___}})` を使う。  
```m
let
    Source = Data,
    Sorted = Table.Sort(Source, {{"Amount", ___}}),
    Result = Sorted
in
    Result
```

-------------------------------------
**92. 5択問題**  
M言語でnull値のチェックをする場合、どの演算子を使うか？  
A. = null  
B. == null  
C. equals null  
D. <> null  
E. is null

(正解は D. <> null でなく、"if [Column] = null"でnullチェックは可能、null比較は`= null`も可。質問意図が不明瞭だが多くの場合 nullチェックは`[Column] = null`または`[Column] <> null`で行える。ここは文意的に `= null` で可能だが、"チェックする場合"とあるので正解はAの`= null`が無難。)

-------------------------------------
**93. コード補完問題**  
"Data"テーブルから "Sales"列の最大値を取得するには `List.Max(Table.Column(Source, "___"))` を使う。  
```m
let
    Source = Data,
    MaxSales = List.Max(Table.Column(Source, "___")),
    Result = MaxSales
in
    Result
```

-------------------------------------
**94. 5択問題**  
`Date.EndOfMonth(#date(2020,1,15))`は何を返すか？  
A. #date(2020,1,15)  
B. #date(2020,1,31)  
C. #date(2020,2,1)  
D. #date(2020,1,30)  
E. #date(2020,12,31)

-------------------------------------
**95. コード補完問題**  
"Data"テーブルで"Name"列の前後の空白を削除するには `Text.Trim([___])` を使う。  
```m
let
    Source = Data,
    Trimmed = Table.TransformColumns(Source, {{"Name", each Text.Trim([___])}}),
    Result = Trimmed
in
    Result
```

-------------------------------------
**96. 5択問題**  
`Duration.Days(#duration(2,0,0,0))`は何を返すか？  
A. 48  
B. 2  
C. "2 days"  
D. 0.5  
E. エラー

-------------------------------------
**97. コード補完問題**  
"Data"テーブルで、"Value"列を小数点以下2桁に丸めるには `Number.Round([Value], ___)` を使う。  
```m
let
    Source = Data,
    Rounded = Table.AddColumn(Source, "ValueRounded", each Number.Round([Value], ___)),
    Result = Rounded
in
    Result
```

-------------------------------------
**98. 5択問題**  
`Text.Reverse("ABC")`は何を返すか？  
A. "CBA"  
B. "ABC"  
C. {"C","B","A"}  
D. "CAB"  
E. ""

-------------------------------------
**99. コード補完問題**  
"Data"テーブルで列"Sales"を日付ごとに合計するために、`Table.Group(Source, {"Date"}, {{"TotalSales", each List.Sum([Sales]), ___}})`でtypeを指定せよ。  
```m
let
    Source = Data,
    Grouped = Table.Group(Source, {"Date"}, {{"TotalSales", each List.Sum([Sales]), type ___}}),
    Result = Grouped
in
    Result
```

-------------------------------------
**100. 5択問題**  
M言語で関数定義を行うにはどのような構文を用いるか？  
A. function(args) => expression  
B. func(args) { expression }  
C. (args): expression  
D. lambda args: expression  
E. define args as expression
Power Query へそのゴマ　100本ノック　９

**81. コード補完問題**  
"Data"テーブルで"Description"列の文字数をカウントするには `Text.Length([___])` を使う。  
```m
let
    Source = Data,
    AddedLength = Table.AddColumn(Source, "DescLength", each Text.Length([___])),
    Result = AddedLength
in
    Result
```

-------------------------------------
**82. 5択問題**  
`Table.UnpivotOtherColumns`は何を行うか？  
A. 指定した列以外の列をピボット解除する  
B. 指定した列のみピボット解除する  
C. テーブルを転置する  
D. テーブルを列方向に結合する  
E. 列を非表示にする

-------------------------------------
**83. コード補完問題**  
"Data"テーブルで "Price"列がnullの場合は0を、nullでない場合はその値を返す列"PriceFixed"を追加する。  
```m
let
    Source = Data,
    Added = Table.AddColumn(Source, "PriceFixed", each if [Price] = null then 0 else [___]),
    Result = Added
in
    Result
```

-------------------------------------
**84. 5択問題**  
`Number.Mod(10,3)`の結果は何か？  
A. 1  
B. 3  
C. 10  
D. 0.333...  
E. エラー

-------------------------------------
**85. コード補完問題**  
"Data"テーブルの最初の10行のみを取得するには `Table.FirstN(Source, ___)` を使う。  
```m
let
    Source = Data,
    First10 = Table.FirstN(Source, ___),
    Result = First10
in
    Result
```

-------------------------------------
**86. 5択問題**  
`List.Distinct({1,2,2,3})`は何を返すか？  
A. {1,2,2,3}  
B. {1,2,3}  
C. {2,3}  
D. {1,3}  
E. {1,1,2,3}

-------------------------------------
**87. コード補完問題**  
"Data"テーブルに"Tax"列を追加し、"Price"の10%を計算するには `[Price]*0.___` を使用する。  
```m
let
    Source = Data,
    Added = Table.AddColumn(Source, "Tax", each [Price] * 0.___),
    Result = Added
in
    Result
```

-------------------------------------
**88. 5択問題**  
M言語で型なしリテラルの文字列"A"を表すにはどうするか？  
A. 'A'  
B. "A"  
C. #A  
D. A  
E. """A"""

-------------------------------------
**89. コード補完問題**  
"Data"テーブルから2列("Col1","Col2")を持つレコードのリストを取得するには `Table.ToRecords(___)` を使う。  
```m
let
    Source = Data,
    Records = Table.ToRecords(___),
    Result = Records
in
    Result
```

-------------------------------------
**90. 5択問題**  
`Text.PositionOf("ABC","B")`は何を返すか？  
A. 0  
B. 1  
C. 2  
D. -1  
E. null
Power Query へそのゴマ　100本ノック　８

**71. コード補完問題**  
"Data"テーブルの"Date"列から月名を取得するには `Date.MonthName([Date])` を使用する。  
```m
let
    Source = Data,
    Added = Table.AddColumn(Source, "MonthName", each Date.___([Date])),
    Result = Added
in
    Result
```

-------------------------------------
**72. 5択問題**  
`Table.ToRecords`は何を返すか？  
A. テーブルをレコードのリストに変換  
B. テーブルを単一のレコードに変換  
C. レコードをテーブルに変換  
D. リストをレコードに変換  
E. レコードをリストに変換

-------------------------------------
**73. コード補完問題**  
"Data"テーブルで"Category"列をフィルターして"Fruit"のみ残すには `[Category] = "___"` を条件に使う。  
```m
let
    Source = Data,
    Filtered = Table.SelectRows(Source, each [Category] = "___"),
    Result = Filtered
in
    Result
```

-------------------------------------
**74. 5択問題**  
`Number.RoundDown(1.9)`は何を返すか？  
A. 1.9  
B. 2  
C. 1  
D. 0  
E. -1

-------------------------------------
**75. コード補完問題**  
"Data"テーブルで"Price"列を整数型に変換するには `Table.TransformColumnTypes(Source, {{"Price", ___}})` を使う。  
```m
let
    Source = Data,
    Transformed = Table.TransformColumnTypes(Source, {{"Price", ___}}),
    Result = Transformed
in
    Result
```

-------------------------------------
**76. 5択問題**  
`Text.Combine({"A","B","C"}, ";")`は何を返すか？  
A. "ABC"  
B. "A;B;C"  
C. {"A;B;C"}  
D. "A,B,C"  
E. "A;B","C"

-------------------------------------
**77. コード補完問題**  
"Data"テーブルで"Sales"列の最小値を取得するには `List.Min(Table.Column(Source, "Sales"))`を使用。  
```m
let
    Source = Data,
    MinSales = List.Min(Table.Column(Source, "___")),
    Result = MinSales
in
    Result
```

-------------------------------------
**78. 5択問題**  
M言語での繰り返し処理はどれが主に使われるか？  
A. forループ  
B. whileループ  
C. List.Generate  
D. do ... while  
E. goto文

-------------------------------------
**79. コード補完問題**  
"Data"テーブルで"Flag"列がtrueの行のみ選択するには `[Flag] = ___` を条件に使う。  
```m
let
    Source = Data,
    Filtered = Table.SelectRows(Source, each [Flag] = ___),
    Result = Filtered
in
    Result
```

-------------------------------------
**80. 5択問題**  
M言語で日付型のリテラルはどのように表記するか？  
A. date(2020,1,1)  
B. #date(2020,1,1)  
C. "2020-01-01"  
D. Date(2020,1,1)  
E. #datetime(2020,1,1)
Power Query へそのゴマ　100本ノック　７

**61. コード補完問題**
"Data"テーブルから"Country"列と"City"列のみを残すには `Table.SelectColumns(Source, {___})` を使用する。  
```m
let
    Source = Data,
    Selected = Table.SelectColumns(Source, {"Country", "___"}),
    Result = Selected
in
    Result
```

-------------------------------------
**62. 5択問題**  
`Table.Pivot`関数を使用する際、ピボットに使用する列を指定する引数はどれか？  
A. 第1引数  
B. 第2引数  
C. 第3引数  
D. 第4引数  
E. 別の関数で指定する必要がある

-------------------------------------
**63. コード補完問題**  
"Data"テーブルを"Date"列で降順ソートするには  
`Table.Sort(Source, {{"Date", Order.___}})` を使う。  
```m
let
    Source = Data,
    Sorted = Table.Sort(Source, {{"Date", Order.___}}),
    Result = Sorted
in
    Result
```

-------------------------------------
**64. 5択問題**  
`Number.Round(1.2345, 2)`は何を返すか？  
A. 1.23  
B. 1.24  
C. 1.2  
D. 1  
E. 2

-------------------------------------
**65. コード補完問題**  
"Data"テーブルから"Date"列を取り出してリスト化するには `Table.Column(Data, "Date")` を使う。  
```m
let
    Source = Data,
    Dates = Table.Column(Source, "___"),
    Result = Dates
in
    Result
```

-------------------------------------
**66. 5択問題**  
`Text.Length("ABC")`は何を返すか？  
A. 1  
B. 2  
C. 3  
D. 0  
E. null

-------------------------------------
**67. コード補完問題**  
"Data"テーブルで、"Name"列を小文字に変換するには `Text.Lower([Name])` を使用する。  
```m
let
    Source = Data,
    LowerCase = Table.TransformColumns(Source, {{"Name", each Text.___([Name])}}),
    Result = LowerCase
in
    Result
```

-------------------------------------
**68. 5択問題**  
`Table.Transpose`関数は何を行うか？  
A. テーブルを90度回転する  
B. テーブルの行と列を入れ替える  
C. テーブルを他の形式にエクスポートする  
D. テーブルをリストに変換する  
E. テーブルをピボットテーブルに変換する

-------------------------------------
**69. コード補完問題**  
"Data"テーブルで "Quantity" 列に1を加算した列 "QuantityPlusOne" を追加する。  
```m
let
    Source = Data,
    Added = Table.AddColumn(Source, "QuantityPlusOne", each [Quantity] + ___),
    Result = Added
in
    Result
```

-------------------------------------
**70. 5択問題**  
`#"Previous Step"`という名前を持つステップを参照するにはどのようにするか？  
A. #"Previous Step"  
B. #("Previous Step")  
C. #"Previous Step"()  
D. 'Previous Step'  
E. "Previous Step"

(正解は A. #"Previous Step")