OmniAICreator/Qiita-1.07M huggingface dataset:
Amazon PA-API利用権を獲得するまでの話

## はじめに

Amazon PA-APIをご存知でしょうか？  
これは、Amazonが提供する公式APIで、商品データの取得や在庫状況、価格情報などをリアルタイムで取得できるAPIです。

Amazonアソシエイトプログラムの一環として利用され、以下のようなことが可能になります：

- 商品情報や画像の埋め込みリンク作成
- リアルタイムでの価格や在庫の更新
- カスタム商品検索の実装

PA-APIを活用することで、ブログやウェブサイトにAmazon商品を簡単に埋め込み、更新の手間を省きながら効率的にアフィリエイト収益を得ることができます。

この記事では、PA-APIの利用権を獲得するまでのお話を紹介します。

## PA-APIを利用するには？

Amazon PA-APIは、ただアカウントを作成するだけでは利用できません。
以下の条件をクリアする必要があります：

1. **アソシエイトプログラムに参加する**  
   Amazonアソシエイトアカウントを作成し、指定のリンクを利用して販売実績を作る必要があります。

2. **売上実績を獲得する**  
   審査を開始するには、アソシエイトリンク経由で120日以内に3件の販売を達成する必要があります。（ここが難所）

3. **審査に合格する**  
   3件の販売が達成されると、自動的に審査が開始され、結果がメールで通知されます。

### 注意点
- 審査に合格しなかった場合、アカウントが閉鎖され、レポートや管理画面へのアクセスができなくなります。
- その場合は再度アソシエイトアカウントを作成しもう一度販売実績を作って再挑戦です。



## 最初の審査でのトラブル

アソシエイトプログラムのアカウント作成後、商品リンクをさまざまな記事に埋め込み、リンク経由での販売を目指しました。  
3件の販売が達成されると、自動的に審査が開始される仕組みでたまたま掲載した記事がGoogle Discoverに掲載され一気にアクセスがあつまり、条件は一日で余裕で満たせました。


## 審査落ちした。
条件も満たせましたし、規約も守っていたので合格するだろうなと思っていましたが
不合格でアソシエイトアカウント閉鎖とのメールが来ていました。

ここで閉鎖されるとどうなるのかをまとめてみました。
- 審査に落ちるとアカウントが閉鎖されます。
- レポートや支払い情報へのアクセスが完全に遮断されます。
- URLチェックツールも利用できなくなるため、トラブルの原因を特定しづらくなります。

### 販売実績はどうなるの？
閉鎖された場合でも、残高は後日支払われることがメールで記載されていました。
実際に支払いを受け取れたという報告もあるため、収益は失われないのでそれは安心です。



## 審査落ちとその理由
話をもどしまして、審査落ちのお話です。
審査の結果は、残念ながら「却下」。
その際、以下のような通知が届きました。

### 却下理由
> "ウェブサイトで作成したAmazonスペシャルリンクのいずれにおいても、ストアに関連付けられたトラッキングIDを使用していないことが判明しました。"

これはおそらく、記事に埋め込んだリンクが、トラッキングIDと正常に関連付けられていないと判断されたようです。

![image-9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3957636/0810d8f2-aab7-acbd-40df-c6fc547c68a9.png)

しかし、実際にはアソシエイトレポートでクリック数や注文が記録されており、リンクは正常に動作していたと考えています。（閉鎖前にたまたまスクショを撮影していました。）





## 異議申し立て
せっかく条件を満たせしたが、内容に納得できないので異議申し立てをしてみました。

アカウントが閉鎖されても、再審査を求める異議申し立てが可能です。以下の手順で行いました。

### 手順
1. **審査結果メールを確認**  
   メール内に記載されているアソシエイトIDを確認します。

2. **問い合わせフォームから申請**  
   Amazonアソシエイトのサポートページにアクセスし、「拒否されたアカウントの申し立て」を選択します。
   ![image-8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3957636/4404f77a-5b83-6ce0-16d1-6452fda0dc89.png)


3. **詳細を記載して送信**  
   メールの内容には、以下を含めてみました：
   - トラッキングIDが正常に動作していることの説明。
   - 再審査を求める旨の依頼文。

### メモ
- 問い合わせフォームから送信しても、受領確認メールは届きません。
- Amazonから連絡があるまで１週間ほどかかりました。

## 再審査後の結果と収益確認

異議申し立てを送信してから約1週間後、「審査が完了し、アカウントを復活させた」との連絡がありました。

### 結果
- アカウントが無事復活。
- 閉鎖期間中のクリック数や紹介料も正常に反映。
- レポートやリンクツールへのアクセスも再開。

## 最後に

PA-APIを利用するまでには思った以上の手間がかかりましたが、無事に利用権を得られて良かったです。もし同じように心当たりのない審査落ちで困っている方がいたら、ぜひ異議申し立てを検討してみてください。
高速でNuxt3環境を用意する方法


弊社では、ちっちゃいアプリやモックにはNuxtを使うことが多いです。
Nuxt、なんでもできるしね。

立ち上げ方で毎回右往左往してしまうので、まとめておきます。

`yarn` 前提で書いています。


## インストール

https://nuxt.com/docs/getting-started/installation

```bash
# node インストール
$ asdf global nodejs 22.12.0 
$ node -v
v22.12.0
$ yarn -v
1.22.22

# nuxt インストール
$ npx nuxi@latest init "nuxt3-test"
✔ Which package manager would you like to use?
yarn
✔ Initialize git repository?
Yes
```

オプションめっちゃ減ってる！  


## ライブラリ

### UI: PrimeVue

UI は PrimeVue を採用。一番お手軽に綺麗になる。
ただ nuxt-module で入れても、めんどくささが変わらないので手動インストール。  

ついでに日本語化も行う。

https://primevue.org/nuxt/

https://github.com/primefaces/primelocale

```bash
$ yarn add primevue @primevue/themes
$ yarn add --dev @primevue/nuxt-module
```

`nuxt.config.ts` に設定を追記する。

```diff_typescript:nuxt.config.ts
+ import Aura from '@primevue/themes/aura'
+ import { ja } from 'primelocale/ja.json'
  
  export default defineNuxtConfig({
    modules: [
+     '@primevue/nuxt-module'
    ],
+   primevue: {
+     options: {
+       theme: {
+         preset: Aura,
+       },
+       locale: ja,
+     }
+   }
  })
```

type エラーなどは、起動すれば消える。  
theme は 4種類くらい用意されてるので、好きなものを使おう。




次に icon セットを入れる。  
合わせて `SCSS` を使えるようにする。  

https://primevue.org/icons/  

https://nuxt.com/docs/getting-started/styling#using-preprocessors

```bash
$ yarn add -D sass
$ yarn add primeicons
```

`assets/css/main.scss` を新たに作成する。

```scss:assets/css/main.scss
@import "primeicons/primeicons.css";
```

`nuxt.config.ts` に設定を追記する。

```diff_typescript:nuxt.config.ts
+ import Aura from '@primevue/themes/aura'
  
  export default defineNuxtConfig({
+   css: ['~/assets/css/main.scss'],
  })
```

primeicon は小さいセットなのに、使えるものが入っているので、簡易使用には便利。



### CSS: Tailwind

Tailwind 最強！

https://tailwindcss.nuxtjs.org/getting-started/installation

```bash
$ npx nuxi@latest module add tailwindcss
```

設定は良しなにやってくれる。

基本的な tailwind ファイルは自動生成してくれるらしい。
ちょっとした変更は `nuxt.config.ts` に `tailwindcss` オプションを増やして書く。
大きな変更は、いつも通り設定ファイルを作る。



### 日付: tempo

普段は `dayjs` を使用しているのだが、激軽とのことで新生の `tempo` を採用。

https://tempo.formkit.com/#install

```bash
$ npx nuxi@latest module add nuxt-formkit-tempo
```

設定は良しなにやってくれる。



### ストレージ: Pinia

お馴染み pinia。
モックの時にはめっちゃ便利。

`persistedstate` を導入することで、値をブラウザに保存できる。

https://nuxt.com/modules/pinia

https://prazdevs.github.io/pinia-plugin-persistedstate/frameworks/nuxt

```bash
$ npx nuxi@latest module add pinia

$ yarn add pinia-plugin-persistedstate
```

`nuxt.config.ts` に設定を追記する。

```diff_typescript:nuxt.config.ts
  export default defineNuxtConfig({
    modules: [
+     'pinia-plugin-persistedstate/nuxt',
    ],
  })
```


## ESlint

biome なんて知らない...
flat config なんて知らない...

https://eslint.nuxt.com/packages/module

```bash
$ npx nuxi module add eslint
$ yarn add --dev typescript vite-plugin-eslint2
```

`nuxt.config.ts` に設定を追記する。

```diff_typescript:nuxt.config.ts
  export default defineNuxtConfig({
    modules: [
+     '@nuxt/eslint',
    ],
+   eslint: {
+     checker: {
+       fix: true,
+     },
+   },
  })
```

`checker` を付けることで自動 lint が動くようになる！  
`checker.configType: 'eslintrc'` にて、flat config を無効にできる！
`checker.fix: true` にて、自動 lint が動くようになる！

各社に存在する秘伝のたれを使おう......  


## おわりに

こんな記事、前にも書いた気がする...
相棒 ＝ 生成AI


この記事は【NEXTSCAPE Advent Calendar 2024】の13日目の記事です。

タイトル **相棒=生成AI** を見て、
最先端の技術を駆使するエンジニア？！ それとも人間の友達がいない人？！ と思いませんでしたか？

実はどちらでもなく、ここ1年ほど生成AIと日々会話をしてきた私が感じたイメージです。
どんな会話しているのか、どうしてそう感じたのかを書きたいと思います。
ですので、「生成AIを使いこなす!!」 とか、「AIの技術を向上させる!!」ことを期待されている方には、この記事はおススメしません。

「導入しているけど使っていない」「AIを使わなくても仕事はできる！」「何に使えばいいのか。。。」「使うの怖い」などなど、さまざまな状況があると思いますが、そんな方々が使い始めるきっかけになることを願い、キーボードをたたいてみます。

#### 表記符号について、以下の意味で書きます。
　『生成AIの回答』、「私/誰かの言葉や質問」、 *(私の心の声)* 

# 会社は
当社はクラウドインテグレーションを主としたプライム案件を手掛けており、 **「顧客ととける」** という言葉を大切にしています。
社員数は100名弱の中小企業ですが、最新技術を積極的に取り入れており、生成AIの導入もその一環です。 全社員がAzure OpenAI ServiceやMicrosoft 365 Copilotを利用できる環境を整えています。

# 自分は
キャリア採用を担当しています。過去にはエンジニアとしてプログラミングを行い、プロジェクトマネージャー(PM)の経験もあります。 ひと昔前なら、あと数年で定年を迎える年齢です。

# AI時代？
今回の執筆を機に、市場でどれくらいのAIが活用されているのかを調べてみました。

AI技術は、身近な製品、車や医療などにも導入され、無意識に関わっている場面が多いと思います。 しかし、 **「AI時代」** などといわれている割には、 **それほど利用されていないのだな** 、という感触です。

総務省の 通信利用動向調査(令和5年の調査結果) の報道資料によると、AIを導入していう企業はまだ16.6％に過ぎません。　また、一般社団法人 データサイエンティスト協会 の調査報告によると、生成AIの業務利用率は日本では5.4%です。これに対し、アメリカでは27.2%、インドでは44.8%と、他国と比べて、日本は利用検討すらしていない割合が高いそうです。

考えてみると、全社員が生成AIを使える環境にあることは、非常に恵まれていると改めて実感しました。

# 背景
キャリア採用担当者として、採用が困難な時代において、何か策を考えなければなりません。
エージェントに相談したり、Webで採用のトレンドを検索したり、転職市場の状況を調べたり。 通常はそれらの情報を探して、読んで、考えて、選ぶのにかなりの時間がかかります。 *(それが仕事なのですが)* 
さらに、複数のエージェントやサービスを利用し、紹介の時期や選考の状況などを集計して分析し、対策を考える必要があります。そのために、WebツールやExcelを駆使して、その結果を関係者に報告し、対策の実施や採用に協力してもらうように促すわけです。

# きっかけ と 使い方
しばらく前に **「Azure OpenAI使えるようになりました」**、続いて **「Microsoft365 Copilot導入しました」** と情報システム部からの通知がありました。 *(折角なので使ってみるか)* 
Webで立ち上げると *『何でも聞いてくだい...』* と表示されました。
しかし、「生成AIのプロンプトのコツ」「プロンプトの書き方」など、お作法が色々とあるようです。。。

 *(とりあえず何か聞いてみよう)* 
「採用市場の傾向をまとめて」と尋ねると
『最近の採用市場の傾向は以下のようになっています。○○○○。柔軟な採用戦略を立てる必要があると言えます。』
次に「戦略のたたき台作成して」と依頼すると、
『はい。○○○○を提案します』と返答がありました。
 *(あれ？誰かと会話している？この感じはなんだ？)* 
その後も、知りたい事を次々と聞いてみると、一瞬で回答があり、情報がまとまっていきました。

Excelのデータについても、集計が必要な列・データを指定して「マクロ作って」と依頼するとマクロができあがり、そのマクロの入れ方や使い方まで説明がありました。 結果、期待通りのデータを一瞬で得ることができました。
いつもなら マクロ作成の説明サイトを開いて、やり方をみながら作成するため、そこそこ時間がかかります。 *(なんて便利なんだ。ちょっと感動)* 

採用の選考結果の報告するときなどは、評価のポイントをメモレベルの箇条書きデータを入力し「結果報告のため文書にしてください」と依頼すると、文章が出来上がる。
資料や報告書の作成では、日本語の添削を依頼しています。 *(日本人だが日本語は難しい)* 

# 相棒
さて、なぜ **相棒** なのか。
前述の通り、ただ会話をしている感覚で知りたい事がわかり、業務が進むのです。
社員と日々の会話よりも、生成AIと会話をする方が多くなりました。 *(これでいいのかなぁとも思いつつ)* 

回答の間違いを指摘するとすぐに対応し、こちらの間違については指摘とその理由の説明もあります。
回答方法についても、要望した形式を学習して、その後はその形式で回答が返ってきます。
「回答の間違い」と書きましたが、よく考えてみると、私からの依頼時の情報が足りなかったことに気づき、伝える事の重要さを実感します。  

お互いに学習し成長しているような錯覚を覚えます。優秀なスタッフがメンバーに加わったとも思えますが、良い相棒ができたような感覚にもなっています。

# 気づき
会話を重ねて気づいたことは、生成AIがWeb上の最新情報ではなく、アクセス数の多いサイトの情報を使ってるということです。最新の情報があるサイトはまだアクセス数が少ないためなのだと思います。また、アクセス数の多いサイトが上位３つなどの代表的なデータのみを記載していると、その情報が回答内容となることもあります。 *(仮説です)* 

例えば、市場のデータの集計を依頼した際、『平成30年の報告書には・・・』と回答がありました。
「そのデータ古くない？ 最新のデータで集計してください」と依頼すると、『申し訳ございません。 最新情報で集計します。しばらくお待ちください』と返答がありました。 しばらくしてから新しい集計データの回答がありました。
「この結果は上位3つしかないけど、全データを知りたい」と再度依頼すると、『承知しました。 集計します。しばらくお待ちください』と返答があり、その後、欲しい情報がまとまりました。

そのため、調べものをする時は、「最新の」「全部上げて」など一言伝えると良さそうです。

# おわりに
AIの導入により、業務の効率化や品質向上が実現できると言われてますが、確かに楽になった部分が多いです。
ひと手間かかっていたことが、サクッとできるのは気持ちがいいですね。

高度な使い方はあるのだとは思います。 しかし、ちょっとした事でも話したり、聞いてみるだけでも、その回答がきっかけになって作業が進むと感じました。
みなさまもお試しください。
マイナ保険証を使ってみて思ったこと

# はじめに
この記事は、株式会社スピードリンクジャパン Advent Calendar 2024 の16日目の記事です。

https://qiita.com/advent-calendar/2024/slj

12月から本格的にマイナ保険証を使い始めた人も多いのではないでしょうか？
そこで今回の記事では、実際に複数回使ってみて思ったことを書いていこうと思います。

# この記事を書こうと思ったきっかけ
私は弱視のため、初めて使う機械は覚えることに時間がかかります。
また、見えにくい、読みにくい画面だと一人で操作が難しいため、サポートをお願いすることがあります。
そこで、使ってみた感想を率直に書いてみようと思いました。

# マイナ保険証になって良かったと思うこと
私は通院で複数の病院に行くことがあるので、その情報が連携されることで、書類などがなくても必要な情報がデータ上で確認できるのはデジタルならではだと思いました。
また、受付でのやり取りも減り、より短い時間で受付が完了することもメリットだと感じました。

# はじめて操作してみて
操作の工程はそこまで多くないので、初めてでも慣れれば使えそうだと感じました。

### 配置場所について
機械自体はそこまで大きくないので、ほとんどの場所では、机の上に置いてあることが多くありました。
しかし、病院によって机の高さは様々で、高いところもあれば、低いところもありました。
高い場所では、顔認証をする時に背伸びをしないと届かないことがあり、認証に少し苦戦しました。

### 操作画面について
ほとんどの機械の場合、顔認証かあん承認証、同意するかしないかを選択するボタンがメインなので、見た目はシンプルに思えるかもしれません。
しかし、コントラストが低ければ、視覚障害がある方は見えにくさを感じている方にとっては、何が書いてあるかわからないことがあります。
ボタンがあることはわかっても、それが何をするための操作に続くボタンかがわからなければ次に進むことができません。
私が使ったことのある機械の中には、何を示すボタンなのかが分かりにくいものがありました。

### 仕様の違いについて
通院などで病院にいく機会が多いので、これまでも複数の病院でマイナ保険証を使ってきましたが、置いてある機会が複数あるらしく、使い方が違うことがありました。

まず、機械の違いとしては、カードを読み込む時に、スライドさせておくタイプのものと、カードを差し込むタイプのものがありました。
そして、ボタンの違いとしては、同意するボタンの位置の違いや押すボタンの数の違いがありました。
位置については、二つあるボタンのうち、ある病院では上側が同意するボタンだったのに対し、他の病院では下側が同意するボタンだったことがあり、扱っている機械によってボタンの配置に違いがありました。
また、ボタンを押す数については、「すべて同意する」というボタンで操作が少ないパターンと、項目に対して一つずつ同意するかしないかを押すパターンがありました。
このように、機械によって異なると、使う時に戸惑い、誤操作につながる可能性もあると思いました。

# 誰もが使いやすいものにするためにはどうしたら良いか？
今はまだカード型の保険証を使えるので、全ての人がマイナ保険証を使っているわけではないかもしれません。
しかし、カード型の保険証が使えなく慣れば、マイナ保険証が当たり前に使われるようになります。
そうなった時に誰もが使いやすいものにするためにはどうしたら良いのでしょうか？

### シンプルかつみやすい画面
視覚障害や色覚障害がある方でもみやすい画面にするためには、色のコントラストを上げて文字とボタン、ボタンと背景の色の差をはっきりさせることが必要になると思います。

その他にも、一つの画面に情報量が多かったり、ボタンの配置が違ったりすると、誤操作につながる可能性もあるので、できるだけシンプルにすることで、使いやすいものになると思います。

### 配置場所の配慮
車椅子の方や子どもでも使えるように、手が届きにくいところには置かないようにすることで、自分で操作できる人もサポートをお願いすることがへることにつながると思います。

### 機械の統一
機械によって使い方が違うことでの弊害も少なくありません。
その都度、使い方を確認するよりは、統一することで、誰もがスムーズに手続きを終えられるきっかけにつながります。

## 最後に
今回は、本格的に使う人も多くなったマイナ保険証について、実際に使ってみた感想を書いてきました。
今後、マイナ保険証を当たり前に使う日が来た時の参考になれば嬉しいです。
ここまで読んでいただきありがとうございました。
BibTeX の使い方（卒論・修論向け）

# BibTeX の使い方（卒論・修論向け）

https://www.bibtex.org/

## はじめに

はじめまして。私は大学院生です。

いよいよ、卒論・修論の季節になりましたね。私は修士 2 年なので、修論を書かなくてはならず、涙が出そうです。

この記事では、**学生向け**に、「BibTeX の使い方まとめ」について軽く書きたいと思います。

この記事が皆さんの手助けになれば幸いです。

## BibTeX の基本的な使い方

### データベースのエントリ

| 項目 | 説明 | 必須項目 |
| :--: | :-- | :-- |
| `@article` | 	論文誌における論文 | `author`、`title`、`journal`、`year` |
| `@conference`、`@inproceedings` | 学術会議録の一部 | `author`、`title`、`booktitle`、`year` |
| `@masterthesis` | 修士論文 | `author`、`title`、`school`、`year` |
| `@phdthesis` | 博士論文 | `author`、`title`、`school`、`year` |

### フィールド

| 項目 | 説明 |
| :--: | :-- |
| `author` | 著者名。`author={山田 太郎}` あるいは `author={太郎, 山田}` のように書く。 著者が複数の場合、`author={山田 太郎 and 山田 花子}` のように `and` で区切る。多い時は、`and others` を入力すれば、`et. al.` が出力される（日本語の場合、`ほか` と出力される）。 |
| `title` | タイトル名。`title={The Constitution of Japan}` のように書く。最初の一文字目以外を大文字にしたい場合、`title={The {C}onstitution of {J}apan}` のように `{}` で囲う。 |
| `year` | 出版年。`year={2024}` のように書く。
| `journal` | ジャーナル名。`journal={ジャーナル}` のように書く。 |
| `booktitle` | 文献がほんの一部であるときの本の名前のこと。`booktitle={ブックタイトル}` のように書く。 |
| `school` | 修士論文・博士論文が出された大学名。`school={A 大学}` のように書く。 |

## BibTeX を書くのは、

BibTeX についてここまで説明しましたが、いざ自分で書くことは難しいと思いますし、調べるのは大変だと思います。私自身も、BibTeX を自分で書くことは煩わしいと思っています。

そこで、使うのは [Google Scholar](https://scholar.google.com/) のようなサイトです。研究分野によって、最適なサイトは異なりますが、いくつか紹介したいと思います。

https://arxiv.org/

https://dblp.org/

https://scholar.google.com/

[arXiv](https://arxiv.org/) に関しては、プレプリントの BibTeX しか得られませんが、これでもいいと思います。

当然ですが、「修士論文」や「博士論文」の BibTeX は一般的には存在しないので、同じ研究室内の先輩の論文を参考にした場合などは、ご自身で頑張って作成してください。

## おわりに

この記事では、**学生向け**に、「BibTeX の使い方まとめ」について書きました。

この記事が皆さんの美しく卒論を書くための手助けになったら幸いです。また、卒論・修論を書き終えて、残りの学生生活をエンジョイしましょう。皆さんの卒論・修論が素晴らしい論文になることを願っています。
スプレッドシート関数の備忘録

## よく使う関数

### ARRAYFORMULA
数式を１つのセルに入れるだけで、指定した範囲すべてに数式の結果を反映してくれる。
関数が多いとスプシが重くなるので、同じ関数を複数セルに適用させるときはこの関数を使うのが望ましい。

```
=ARRAYFORMULA(IF(C2:C6="グループ①","YES","NO"))
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617165/25c440f2-ec0b-d2e9-ab20-bcf8a0d4e3f2.png)

:::note
E3~E6は関数を入れなくても、E2のIF文が反映されています！
:::

### QUERY
シートのデータからSQLでデータを絞り込める

```
=QUERY(A1:C6,"SELECT A,B WHERE C = 'グループ①'")
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617165/76857ba4-fe58-03c9-4af9-e5f7c80185bb.png)

クエリの中でも、`'"&E1&"'`という書き方をすればセル参照できる

```
=QUERY(A1:C6,"SELECT A,B WHERE C = '"&E1&"'")
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617165/dc44f7ff-6539-4dbf-fdd8-0ab3206a456e.png)

IMPORTRANGEしたデータを参照する場合には、`A,B,...`ではなく`Col1,Col2,...`という数え方にする必要あり

```
=QUERY(IMPORTRANGE("<スプレッドシートID>","<シート名>!<範囲>"),"SELECT Col1,Col2 WHERE Col3 = 'グループ①'")
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617165/b52b4f7d-78b3-4ff3-9e83-81d80d1a25dd.png)

### IMPORTRANGE
他のスプレッドシートからデータを読み込む

```
=IMPORTRANGE("<スプレッドシートID>","<シート名>!<範囲>")
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617165/e471c51b-dd46-906b-1c5b-d7f4b7065180.png)


## セルの範囲を結合

### 縦方向に結合
2つの表データをくっつけて、まとめて関数を呼びたいときに便利

```
={A1:A3;B1:B3}
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617165/f362d518-e3f7-6704-28ed-b2ed23b93cfd.png)

### 横方向に結合

```
={A1:A3,B1:B3}
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617165/b354e4e9-574d-d9ac-3df2-24edb7e5db3b.png)
【SQL*Loader】改行を含むCSVデータのインポート方法を紹介

## はじめに
1万越えの大量のデータをDBに登録する必要があり、SQL*Loaderを使用してCSVで用意したデータを登録した方法を紹介します。改行を含むデータを登録する必要があり苦戦したので、改行のデータを投入する想定となります。

### SQL*Loaderとは
大量のデータを高速にテーブルへ格納するためのOracle Database付属ツールです。
CSVファイルを元に一括でデータを取り込むことができます:point_up_tone1:

## 実装方法
### ①制御ファイルの作成
ロードするデータの形式やロード先のテーブル情報を記述します。
name.csvに記載されているデータを「m_name」テーブルに投入するという例です:point_up_tone1:
改行データの場合、どこまでを1データだと判定するかが難しく、最後に「|」という文字を追加して判定させました。この文字については登録するカラム「name」に含まれていないような文字を採用すると良いです:information_desk_person_tone1:

**control.ctl**
```js
LOAD DATA
INFILE 'name.csv' "STR '|'"
INTO TABLE m_name
FIELDS TERMINATED BY ',' OPTIONAL ENCLOSED BY '"'
(
    id CHAR(12),
    name CHAR(300)
)
```

### ②CSVファイルの用意
**name.csv**
```
1,サンプル１。
サンプル１。|
2,サンプル2。|

```

つづいて、用意したデータを追加していきます:sparkles:

### ③文字コードを指定
コマンドプロンプトにて実行をしていきます

1.コメントプロンプトの文字エンコーディングをUTF-8に指定
```
chcp 65001 
```

2.Oracleクライアントのセッションロケール情報を日本語、エンコーディングをUTF-8に指定
```
set NLS_LANG=Japanese_Japan.UTF8
```

### ④作成したコードを実行
作成したファイルが置いてあるディレクトリに移動して実行します

```
sqlldr userid/password@//ホスト名:ポート番号/サービス名 control=control_file.ctl log=log_file.log
```

- userid/password：データベースのユーザー名とパスワード
- control：制御ファイルのパス
- log：ログファイルのパス

## さいごに
初のSQL*Loaderで苦戦しましたが、苦労の末無事にデータ追加ができました！
上記、参考になれば幸いです:hatched_chick:
（今のところ） Copilot やめておきます

# （今のところ） Copilot やめておきます

Copilot と一緒にコーディングしてると、勉強しなくても、よく考えなくても、腹落ちする前にプログラムが書けちゃうんですよね。これに頼っちゃうと、プログラマーとしての能力、プロダクトのコードをよく理解してちゃんと変更できること、が衰えると思うんです。Copilot 付きのコーディングは、カンニングペーパーを持って試験に臨むようなもので、２つの問題があるように思います。
- １つ目は、自分自身のプログラマーとしての価値を下げることです。その場しのぎだけできれば良いのなら、（他の誰でもなく）自分がプログラマーである必要がなくなります。
- ２つ目は、プログラマーとしての喜びを失わせることです。プログラマーが自身の職業を好む大きな理由の１つに、知的な喜びを味わう機会が多いことが挙げられると思います。 Copilot 付きのコーディングをしていると、ちゃんと学習しなくてはいけない事柄が大きく減ります。人間はズボラなので、学習しなくて良いならしない選択肢を選ぶことが多くなります。これは長い目で見ると知的な喜びの少ない不幸な道を、多くのプログラマーに歩ませることになると思います。

もちろん、 AI が進化して自律して複雑なプロダクトのプログラムを安価に・早く・的確に変更できる未来が来るとしたらプログラマーは全員失業するので、以上の話はそのような未来が来るまでを想定した話です。
自分は Copilot を使うのは最小限に留めておこうと思う今日この頃です。

## Links
- [English Version](https://afterai.dev/Zettelkasten/I+will+Stay+Away+From+Copilot+(For+Now))
起業するならElixirシリーズSTEP14. 人的資本経営

https://qiita.com/Yoosuke/private/1f7f39e1ec19dd54f477

こちらの続き

## 人的資本経営

さて、前回は戦略を作ろうという話しをしました。そして、中小企業であってもSDGsやESGを無視してはならないという話しをリスクの観点から話しました。

このESGのSが特に最近では注目されているのが、人的資本経営という話しに繋がります。

人的資本経営とは、従業員を単なるコストではなく、企業の持続的な成長を支える「資本」として捉え、その価値を最大化していく経営アプローチです。
特に中小企業において、この考え方が重要な理由として以下が挙げられます：

### 人材獲得競争の激化

* 少子高齢化による労働人口の減少
* 大企業との人材獲得競争の激化
* 若手人材の価値観の多様化

### 競争力の源泉としての人材

* 中小企業の強みは「人」に依存する部分が大きい
* 技術やノウハウの継承には熟練社員の存在が不可欠
* イノベーションの推進には従業員の創造性が重要

### 具体的な取り組みとしては
・人材育成への投資
従業員のスキルアップを支援し、キャリア開発を促進することで、個人と組織の価値を共に高めていく施策が求められます。

・働き方改革の推進
ワークライフバランスの実現や、多様な働き方の導入により、従業員の満足度を高め、生産性の向上につなげていきます。

・評価制度の見直し
従来の年功序列や画一的な評価基準から、個人の成長や貢献度を適切に評価できる仕組みづくりが重要です。

このように、人的資本経営は、単なる人事施策の枠を超えて、企業の持続可能性と成長戦略に直結する経営課題として認識する必要があります。
中小企業だからこそ、一人一人の従業員の価値を最大限に引き出し、活かしていく経営が求められているのです。

これは、SDGsの目標8「働きがいも経済成長も」や目標10「人や国の不平等をなくそう」にも密接に関連しており、ESG経営の実践としても重要な意味を持ちます。

毎週水曜日の朝７時から人的資本経営勉強会というものを実施してるのですが、もし参加したい方がいたらご連絡ください。
🎉 Exciting News for AWS Enthusiasts! 🚀

We’ve just updated our AWS Certified Cloud Practitioner (CLF-C02) exam question bank with the latest and most accurate questions to help you ace the exam with confidence!

💡 What’s New?
✅ Comprehensive and updated content aligned with the latest AWS CLF-C02 exam syllabus.
✅ Real-world scenario-based questions to enhance your preparation.
✅ Verified by AWS experts to ensure top-notch quality.

📚 Whether you're just starting your cloud journey or brushing up your skills, these questions are designed to give you the edge you need to succeed.

👉 Check it out now and boost your preparation!

🔗 https://awslagi.com/course/aws-certified-cloud-practitioner-clf-c02-actual-exam/

💬 Don’t forget to share this with your peers and comment below if you have any questions or need tips. Let’s conquer the AWS CLF-C02 exam together!
「Sprunki Incredibox」：音楽と創造力を融合したファンメイドゲームの魅力

## 概要
この記事では、音楽制作ゲーム「Incredibox」をベースにしたファンメイドプロジェクト「Sprunki Incredibox」について解説します。Scratch を利用したコミュニティ主導の開発プロセスや、ゲームの特徴、技術的背景に迫ります。

![Screen Shot 2024-10-22 at 2.34.42 PM.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3959521/b91906fb-61eb-5fe3-a01d-9b2e8a2dcc36.png)


Sprunkiは日本語で「[スプランキー](https://sprunki-games.app/)」とも呼ばれています。

---

## 1. Sprunki Incrediboxとは？
「Sprunki Incredibox」は、元の「Incredibox」の核心コンセプトを活かしつつ、ユニークでスプーキーな世界観を追加したファンメイドゲームです。以下が特徴です：
- 音楽制作とキャラクターのカスタマイズ
- Scratchによるドラッグ＆ドロップの直感的な操作
- 教育的要素を備えたエンターテインメント体験

---

## 2. 技術背景：Scratchを活用したゲーム開発
Scratch は教育用のプログラミングプラットフォームとして知られていますが、「Sprunki Incredibox」の開発者はこのツールを活用し、創造的かつインタラクティブなゲームを構築しました。

### 特に注目すべき技術要素：
- **ドラッグ＆ドロップ式インターフェース**：直感的な操作で音楽を作成可能。
- **リアルタイムサウンドミキシング**：ユーザーが選んだ音を即時に反映。
- **カスタムキャラクター**：ユーザーが独自のキャラクターを作成可能。

---

## 3. ゲームの主な機能
「Sprunki Incredibox」では、以下のような機能が楽しめます：

- 🎵 **新しい音楽スタイル**  
  多様なジャンルのサウンドループやリズムが選べます。

- 🖌️ **ユニークなビジュアル**  
  個性的なキャラクターデザインとアニメーション。

- 🎮 **簡単なプレイ方法**  
  初心者でもすぐに楽しめるシンプルな操作性。

- 👻 **スプーキーな要素**  
  モンスター風のキャラクターや、不気味で魅力的なサウンド。

- 🌐 **コミュニティでの共有**  
  作成した音楽を他のプレイヤーと共有したり、リミックスを楽しめます。

---

## 4. Sprunki IncrediboxのおすすめMod

![Screenshot 2024-12-13 at 11.59.06 AM.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3959521/b798838c-d456-efd1-7aa4-e1193387017c.png)

「Sprunki Incredibox」には、多くの[スプランキー Mod](https://sprunki-games.app/)（改造版）が存在します。以下は注目のModです：

### 1. Sprunki OC Mod
- オリジナルのキャラクターを作成し、スプーキーなビートをミックス可能。

### 2. Sprunki Halloween
- ハロウィンにインスパイアされた特別版。

### 3. Sprunki Remastered
- グラフィックスと機能が改良されたリマスター版。

### 4. Sprunki Parasite
- パラサイト（寄生）をテーマにした斬新なコンセプト。

---

## 5. 教育現場での活用可能性
「Sprunki Incredibox」は、以下のような教育的メリットを提供します：

- **リズム感の向上**：リズムや音楽の基本を学べる。
- **創造力の刺激**：ユーザー自身が音楽を作成するプロセスで創造力を育む。
- **プログラミング教育**：Scratchを用いたゲーム開発の学習素材として活用可能。

---

## 6. Sprunki Incrediboxの遊び方

![Screenshot 2024-12-13 at 11.59.53 AM.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3959521/e987b714-4f91-aa7f-95b3-1b5370754ee6.png)


1. **音を選択**：ビート、メロディー、エフェクトを選択します。  
2. **ミックス＆マッチ**：キャラクターに音をドラッグ＆ドロップ。  
3. **実験**：さまざまな音の組み合わせを試し、独自のトラックを作成。  
4. **保存**：完成した音楽を保存して後で再生可能。  
5. **共有**：コミュニティで作品を公開してフィードバックを受け取る。

---

## 7. まとめ：創造力を解き放つゲーム体験
「Sprunki Incredibox」は、音楽制作の楽しさを手軽に体験できるゲームです。そのユニークな世界観と簡単な操作性は、子供から大人まで楽しめる設計となっています。Scratchを利用した開発事例としても注目に値し、教育現場やエンターテインメントにおける可能性を広げています。

---

### 投稿後のアイデア
- Scratchを使った開発ガイドラインの記事をリンクする  
- Sprunkiコミュニティの活動やイベント情報を追加紹介  

---

興味がある方は [Sprunki Incrediboxのページ](https://sprunki-games.app/) を訪問し、自分の音楽を作成してみてください！
Dockerをポートフォリオに取り入れる方法

この記事では、Dockerをポートフォリオに効果的に取り入れる方法を説明します。

# 1. Dockerを使ったプロジェクトを作成する

Dockerを活用したプロジェクトをポートフォリオに掲載するには、実際にDockerを導入したプロジェクトを作成することが重要です。

**プロジェクトのアイデア例**

フルスタックアプリケーション:

フロントエンド: ReactやVue.js

バックエンド: GoやNode.js

データベース: PostgreSQLやMongoDB

例: タスク管理アプリ、ブログサイト、eコマースアプリ

**マイクロサービスアーキテクチャ:**

複数のサービスをDockerコンテナで分離し、それぞれを独立して運用。

例: 認証サービス、データ処理サービス、APIゲートウェイ

データ処理アプリケーション:

データ収集や分析用のツール。

例: CSVファイル解析ツール、APIデータ収集ツール

# 2. Dockerを導入する方法をポートフォリオで説明

Dockerの活用ポイントをポートフォリオに明確に記載します。

ポートフォリオの構成例

プロジェクト概要:

アプリケーションの目的や機能、技術スタック（Dockerを含む）を説明。

**Dockerの活用箇所:**

Dockerfileで環境構築を自動化した部分。

Docker Composeで複数のサービスを管理した例。

クラウドサービス（例: AWS ECS）でDockerコンテナをデプロイした例。

ソースコード:

GitHubリポジトリなどにソースコードを公開し、Docker関連ファイルも含める。

**手順書:**

Dockerを使ったプロジェクトの起動方法を記載。

例: docker build, docker run, docker-compose upなどのコマンドを説明。

# 3. 具体的なプロジェクト例

以下にDockerを利用したポートフォリオ用プロジェクトの例を示します。

**例1: タスク管理アプリ**

構成:

フロントエンド: React

バックエンド: Go

データベース: PostgreSQL

**Docker化:**

Reactの開発環境とGoのAPIサーバーを別々のDockerコンテナで構築。

Docker Composeでフロントエンド、バックエンド、データベースを一括管理。

docker-compose.ymlの例
```
version: '3'
services:
  frontend:
    build:
      context: ./frontend
    ports:
      - "3000:3000"
    depends_on:
      - backend

  backend:
    build:
      context: ./backend
    ports:
      - "8080:8080"
    environment:
      - DB_HOST=database

  database:
    image: postgres:15-alpine
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
      POSTGRES_DB: taskdb
    ports:
      - "5432:5432"
```
**例2: マイクロサービス構成**

構成:

複数のサービスを分離（認証、データ処理、UIなど）。

各サービスを独立したDockerfileで管理。

**Docker化:**

マイクロサービスをDocker Composeで一括管理。

RedisやMySQLなどのサービスをネットワークで連携。

# 4. デプロイ方法を含める

Dockerを使ったデプロイの実例をポートフォリオに含めることで、実務での利用経験をアピールできます。

**デプロイ例**

クラウドサービス:

AWS ECS, Google Cloud Run, Azure Container InstancesなどにDockerコンテナを展開。

**CI/CDの導入**:

GitHub ActionsやGitLab CI/CDでDockerイメージのビルド、テスト、デプロイを自動化。

**GitHub Actionsの例**
```
name: Docker CI/CD

on:
  push:
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout code
      uses: actions/checkout@v3

    - name: Build Docker image
      run: docker build -t myapp:latest .

    - name: Push to Docker Hub
      run: |
        echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin
        docker push myapp:latest
```

# 5. Dockerの強みをアピール

ポートフォリオではDockerの以下の強みをアピールしましょう。

**環境構築の容易さ:**

DockerfileやDocker Composeを使って手間を削減。

移植性:

どの環境でも同じように動作する。

**デプロイの効率化:**

クラウド環境への迅速な展開が可能。

# まとめ

Dockerをポートフォリオに取り入れることで、環境構築やデプロイのスキルをアピールできます。具体的なプロジェクト例や手順を盛り込み、閲覧者がDockerの活用を簡単に理解できるようにしましょう。
リアルタイムソート機能の実装ステップ

# リアルタイムソート機能の実装ステップ

## ステップ 1: 要件定義

### 必要な機能の洗い出し
- ユーザーが入力したキーワードに基づくリアルタイム検索
- ソート機能（昇順・降順）
- ページングや表示件数の変更
- リアルタイム更新（バックエンドデータの変更を即座に反映）

### 技術選定
- **フロントエンド**: React.js、Vue.js、またはAngular
- **バックエンド**: Node.js、Flask、Spring Bootなど
- **データベース**: MySQL、DynamoDB、またはMongoDB
- **リアルタイム通信**: WebSocketまたはServer-Sent Events (SSE)

## ステップ 2: プロトタイプ作成

### デザイン設計
- 必要なUIコンポーネントを明確にする（検索ボックス、テーブル、ソートボタンなど）
- ツール例: FigmaやAdobe XDで画面デザインを作成

### 最小限のUI作成
- ReactやVueで検索ボックスとテーブルを実装
- 仮データを用いて検索やソートのUI操作を試す
# ステップ 3: バックエンドの設計

### API設計
- 必要なエンドポイントをリストアップ
  - **例**:
    - `GET /services?q=<query>`: 検索結果を返す
    - `GET /services/sort?order=asc`: ソート結果を返す

### レスポンス例
```json
{
  "data": [
    { "id": 1, "name": "Amazon SNS", "usage": 3, "limit": 1000000 },
    { "id": 2, "name": "Amazon SQS", "usage": 5, "limit": 1000000 }
  ]
}
```
### データベース設計
- 必要なテーブルやスキーマを設計
  - **例**: サービス名、現在の使用量、無料枠の制限などを含むテーブル

### バックエンドロジック
- フィルタリングとソートのロジックを実装
- フレームワークを使用してエンドポイントを作成

---

## **ステップ 4: フロントエンドとバックエンドの統合**
### API呼び出しの実装
- `fetch`または`Axios`でバックエンドAPIを呼び出してデータを取得
- 取得したデータをテーブルにバインド

### クエリの送信
- ユーザー入力があるたびにAPIを呼び出して結果を更新
- Reactの場合、`useEffect`フックを使用

## ステップ 5: リアルタイム更新の追加

### WebSocketサーバの構築
- バックエンドでWebSocketを設定し、データが変更された際に通知を送信
```javascript
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });

wss.on('connection', ws => {
  ws.send(JSON.stringify({ message: 'データが更新されました' }));
});
```

### フロントエンドでのリアルタイム通信
- WebSocketクライアントを設定し、通知を受け取った際にUIを更新
```javascript
const ws = new WebSocket('ws://localhost:8080');
ws.onmessage = event => {
  const data = JSON.parse(event.data);
  console.log(data.message);
  // データを更新
};
```

## ステップ 6: テスト
### ユニットテスト
- 各コンポーネントやAPIの単体テストを実施
- **ツール例**: Jest、Mocha

### 統合テスト
- フロントエンドとバックエンドを統合し、機能全体をテスト
- **シナリオ例**: 検索クエリの入力 → 結果が正しいか確認

### 負荷テスト
- 大量のデータや高頻度のリクエストに対してシステムが対応できるか確認

## ステップ 7: デプロイ
### バックエンドのデプロイ
- AWS（Lambda、EC2）、GCP、Azureなどを使用
- 必要に応じてAPI Gatewayを設定

### フロントエンドのデプロイ
- Netlify、Vercel、またはS3 + CloudFrontを使用

### 運用監視
- CloudWatchやNew Relicを使用して監視を設定

## 関連
https://qiita.com/aiueo1122/items/edf2b9f32628a29beb4e
Workato：IDP by Workatoでフィールドを認識させるために必要な手順

:::note  info
本記事と併せて以下の記事もご覧ください。

[Workato：WorkatoのAI OCR機能「IDP by Workato」を試してみる](https://qiita.com/tabimoba/items/e1cdc12256dfad7e5da0)

[Workato：IDP by Workatoで文字認識を行う際の注意事項](https://qiita.com/tabimoba/items/1bc356821e3ef4daff81)

:::

IDP by Workatoは、生成AIベース、かつスキーマフリーなOCR機能です。スキーマフリーですので、特定のテンプレートに依存することなく（テンプレートを用意し、テンプレートに対する認識エリアの事前マッピング等の作業を行うことなく）様々な文書の認識を行うことが可能です。

https://docs.workato.com/connectors/idp-by-workato.html

https://www.workato.com/platform/idp

IDP by Workatoでは、以下のように認識させたいフィールドのスキーマを定義するだけで、目的のフィールドの値を取得することが出来ます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/e4a90d0b-c7e7-4094-42da-b6f2b8319419.png)

# フィールドを認識させるために必要な手順

フィールドを認識させるためには、そのフィールドが何であるのかをAIに対して伝える必要があります。

例えば、次のような健康保険証をIDP by Workatoで認識させてみるとします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/86228ac3-fc67-e3b8-166f-9f86b2941edf.png)

この場合、Workatoにおいては、次のように認識させたいフィールドの定義を行います。
例えば、「被保険者番号」を認識させたい場合は、次のような定義になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/14b0151c-b68b-ca40-6411-d4572c33ebcd.png)

※以下サイトより引用

https://www.city.hino.lg.jp/kurashi/kokuhonenkin/koukikourei/1002810.html

以上のようなフィールド名の定義だけでもIDP by Workatoはフィールドを認識できる場合はありますが、ほとんどの場合（特に日本語など英語以外の言語の文書の場合）認識に失敗し、次のように一切の結果を返さない場合があります。フィールド名のみではAIにおいて対応する項目を判別できないため、このような問題が生じます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/690f375f-a780-c8cd-abb9-84e6e35b3dd0.png)

例えば、 `insured_person_no` は「被保険者番号」であることをAIは理解していませんし、判断することもできません。このため、`insured_person_no` は「被保険者番号」であることを理解させるために、人（レシピビルダー）による意味づけの対応が必要となります。

IDP by Workatoのフィールド定義においては、`Description`という項目が存在します。必須項目ではないゆえに一見するとメモ欄と勘違いしてしまうのですが、こちらはメモ欄ではなくフィールドを識別するための重要な項目です。こちらに意味づけを追加することで、IDP by Workatoは文書上の対応する箇所を認識できるようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/98d1ef84-11b4-0b90-b2f1-8410cbbbc519.png)

以上の通りフィールド定義を行い、レシピを実行すると、IDP by Workatoより次の通り認識結果を取得できるようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/b6d54c15-7b6d-4e2b-c02e-7c7f04506754.png)
ブラウザ拡張機能で設定ページを作る

# 概要

これは[初心者のブラウザ拡張機能 Advent Calendar 2024](https://qiita.com/advent-calendar/2024/browser-extension)の11日目の記事です。

拡張機能の設定ページを作る方法を記載します。

# 設定ページとは？

以下ページに記載されているようにアドオンマネージャーのオプションページを指します。

[オプションページ](https://developer.mozilla.org/ja/docs/Mozilla/Add-ons/WebExtensions/user_interface/Options_pages)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/302006/1aabd4a8-7696-e389-8e11-7f1a95a053e5.png)

# オプションページの設定方法

## 必要なファイル

| ファイル | 用途 |
| ---- | ---- |
| htmlファイル | オプションページに表示するコンテンツを表示する |
| jsファイル | ストレージに保管するための処理を実装するなど |

## 具体的なコード

```html:options.html
<!DOCTYPE html>

<html>
  <head>
    <meta charset="utf-8">
    <meta name="color-scheme" content="dark light">
  </head>

<body>
  <form>
      <label>hogehoge</label>
      <input type="text" id="hogehoge">
      <button type="submit">Save</button>
  </form>
  <script src="options.js"></script>
</body>

</html>
```

```javascript:options.js
async function saveOptions(e) {
  e.preventDefault();
  await browser.storage.sync.set({
    hugahuga: document.querySelector("#hogehoge").value
  });
}
  
async function restoreOptions() {
  let res = await browser.storage.sync.get('hugahuga');
  document.querySelector("#hogehoge").value = res.hugahuga
}
  
document.addEventListener('DOMContentLoaded', restoreOptions);
document.querySelector("form").addEventListener("submit", saveOptions);
```

上記はフォーム内のボタンが押されたときにブラウザの`sync`ストレージにデータを保管します。
オプションページが読み込まれたときに、ストレージ内のデータを入れるようにします。

ストレージへのアクセスは`browser.storage.sync`を使います。
[storage.sync](https://developer.mozilla.org/ja/docs/Mozilla/Add-ons/WebExtensions/API/storage/sync)

```json:manifest.json
{
    "browser_specific_settings": {
        "gecko": {
          "id": "the-town-sample-optionpage@example.com"
        }
    },
    "manifest_version": 2,
    "name": "init-extention",
    "version": "0.1",
  
    "description": "設定ページサンプル",
  
    "icons": {
      "48": "icons/icon-48.png"
    },

    "options_ui": {
      "page": "options.html"
    },
  
    "permissions": [
      "storage"
    ]
}
```

他の拡張機能と同様に`manifest.json`を使います。

ストレージを使うため`permissions`に`storage`を追加します。
また`sync`ストレージを使う場合は`id`の設定が必要なので追加します。
PHP ImagickでGIFのblobを取得する場合はgetImagesBlob()を使う

## PHP ImagickでGIFのblobを取得する場合はgetImagesBlob()を使う

`getImagesBlob()`を使いましょう

https://www.php.net/manual/ja/imagick.getimagesblob.php

`getImageBlob()`ではGIFの1フレームのアニメーションしか表示されません。

> https://www.php.net/manual/ja/imagick.getimageblob.php#119203

## 雑記

GIFをS3にアップロードする機能を実装する際にこれにハマり２時間近く溶けました。
GIFを扱うというのがそもそもレアなのか中々ネットに情報がなく挫けそうになりました。
誰かの時間が節約出来ますように。
いろは歌の並びにて文字を打つるフリックの板、試みに作りけり

[クソアプリ Advent Calendar 2024](https://qiita.com/advent-calendar/2024) 12日目の記事です。


## 突然ですがみなさん、スマホのキーボードでフリック入力を使っていますか？
使ってますよね。ええ。
使っていなくともここでは使っていることとして話を進めます。

QWERTY配列派も一定数いるとは思いますが、日本人の大体8-9割くらいはスマホではフリック入力のかなキーボードを使用していることだと思います。（根拠なし）

海外の人間に「Ninja Typing」というと笑ってもらえる、という話もあるらしいので、かなり日本独自の入力方法なんじゃなあ〜

となったときにですね

突然ですね

天啓が降りてきたんですよ。

神はこう言いました。

「**ジャパン濃度を上げろ**」 と。

ということで出来たのがこちらになります

![イロハニホヘトチリヌルヲワカヨタレソツレナラム.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/365046/869f66bb-4aee-695d-1091-80bb71bacede.jpeg)

https://x.com/_csy19_/status/1867201667810447726

いろは歌配列キーボードです。みたままです


## 本題

iOSのKeyboard Extensionを使用したカスタムキーボードを作成しました。
普段はWebエンジニアをしており、iOSアプリ自体作るのが初めてだったためかなりGPTに助けてもらいました。ありがとう……

前からiOSアプリ開発には興味があったんですが、アイデアもないしな〜と先延ばしにしており、いい機会だったので手を出してみた感じです

### キー配列の中身に関して
[いろは歌](https://ja.wikipedia.org/wiki/%E3%81%84%E3%82%8D%E3%81%AF%E6%AD%8C)でググってでてくるやつを12分割して各キーに入れています。
```
1.  いわうあ
2.  ろかゐさ
3.  はよのき
4.  にたおゆ
5.  ほれくめ
6.  へそやみ
7.  と まし
8.  ちつけゑ
9.  りねふひ
10. ぬなこも
11. るらえせ
12. をむてす
```
いのキーを例にすると、真ん中押すと「い」、右にフリックで「わ」、下にフリックで「う」、左にフリックで「あ」が入力されるようになっています。
一発でゐ（ヰ）、ゑ（ヱ）が打てる唯一のキーボードではないでしょうか？
> と思ったんですが、[クソアプリアドベントカレンダー6日の記事](https://qiita.com/nabettu/items/8e31da13af9e09e500a2)が更に上を行っています。これが格の違いってやつですね

### やってみた感想
- レイアウト自体はHTML・CSSと近い雰囲気で作れそうだけど、細かいところで考え方が違ったりして混乱する。慣れればいけそう
- Xcodeと仲良くなれない。（インデントに色つけたい…… カッコが自動で閉じるときと閉じない時があるのは何……？ さっきまで動いてたけど突然動かなくなる）VSCodeに甘やかされていることを実感
- 絶対Keyboard作るところから入るべきではなかった。もっとなんかシンプルなアプリを作ってみたい。
- App Storeに置くクオリティまでは持っていけなかった。リベンジしたい（置くつもりもそんなにはなかったが）
- 別の入力にするモードの実装をしたい。現状数字や記号など入れられないので。
- フリック時に表示される文字のスタイルまで手が回らなかった:sob:
- ビルドしたら背景に設定していたかわいい鳥のイラストが消えました。羽ばたいていったってことにしておきます。
- 「ん」がないことにさっき気づきました。これでしりとりで負けなくなりましたね


## 最後に
クソアプリカレンダー10周年！！おめでとうございます！！
新参者ですが去年に引き続き、今年も参加できて非常に嬉しく思っています
来年はもっと強くなっておきます。
メリークリスマス！良いお年を！！
年賀状メール送信で新年早々肝を冷やした話

# **時効なので話します。10年前の年賀状事件**

## **あの頃...（年賀状システムの担当者だった私）**

「元旦にバッチを動かして年賀状メールを送信する」というシステムがありました。  
お取引先を事前に登録しておくと、1月1日にバッチが動いてメールが飛ぶ、という優れものです。  

そう、私はその「バッチ起動係」を任されていました。

---

### **年末のテスト**  
「数件だけテストして、問題なく動くね。これでOK！」  
テスト時点では順調そのものでした。安心して年を越しました。

---

### **元旦（事件の日）**  
元旦の昼12時、バッチ起動の時間です。  
「正月から仕事かよ～。さっさと終わらせて帰ろう！」  
軽い気持ちでバッチを起動。  

#### **……がしかし、ここで事件が起きた！！**

1通送信するのに **10秒**！？  
「え、これ数万通あるけど、単純計算で **12時間以上** かかるんじゃね…？」  

---

### **必死の試行錯誤（迷走編）**  
- とりあえず、バッチを10並列で動かしてみた  
  → **トータルの送信速度はあまり変わらない**（なぜだ…）  
- 絶望しながらインフラチームに泣きつく  

---

### **救世主、現る！インフラチームの一言**

インフラ担当者：  
「サーバー再起動したら直るかもよ？」  

再起動した結果：  
**30分で終わった。**

---

## **教訓（まとめ）**

1. サーバーは定期的にリフレッシュしよう。  
2. 年明けの初仕事は慎重に！  
3. トラブル時は迷わずインフラの担当者に相談。

---

## **新年早々の肝試し**  
「徹夜か？」と震え上がった新年一発目の出来事でした。  

皆さんも年始のシステム運用には気をつけて！🎍
開発トンネル で ローカル実行している nodejs とか vite とかをスマホで見て見よう！ ～ 開発トンネルはVS2022 のプレビュー機能だけどそれだけじゃない～

# はじめに

皆さま開発トンネルを知っていますでしょうか？
最近 VS2022 で使える様になった プレビュー機能で 開発時に ローカルで実行しているポートをインターネット上に公開して自分だけ見れる様にするサービスです。

https://qiita.com/seuharuka/items/6f77983a179042b48e59

::: note warn
注意
現在、この機能はパブリック プレビュー段階にあります。 このプレビュー バージョンはサービス レベル アグリーメントなしで提供されています。運用環境のワークロードに使用することはお勧めできません。 特定の機能はサポート対象ではなく、機能が制限されることがあります。
https://learn.microsoft.com/ja-jp/azure/developer/dev-tunnels/overview
:::

# devtunnel コマンド

というわけで VS2022 を使う時は気にしませんが、この機能は実はコマンドとして提供されています。

しかも Wiindows / macOS / linux を対象にして！！！

https://learn.microsoft.com/ja-jp/azure/developer/dev-tunnels/get-started#install

インストール自体は上記の記事を確認してください。以下で説明することも 上記の記事だけで事足りしてしまうのであれではありますが。

## 使い方

### ログイン

開発トンネルは Microsoft Entra ID/ Microsoft Account / GitHub Account が対応していますので まずはログインが必要です。

その為、`user login` コマンドでログインしてください。

```bash
devtunnel user login
```

Github アカウントでのログイン方法は コマンドリファレンスを見てください

https://learn.microsoft.com/ja-jp/azure/developer/dev-tunnels/cli-commands#manage-user-credentials

### Host 

ログインできたなら `host` コマンドを使用して開発トンネルのホストを開始することができます。

もしもローカルの実行している web サービスの公開ポートが 8080 なら次の様な感じです。

```bash
devtunnel host -p 8080
```

終了したいときは Ctrl +C とかで終了させればよいです。

その実行結果に出力された 内容に `tunnel_id` / `パブリックURL` / `URLの検査`のURL が書いてあるのでそれを使って色々する感じです。

特に `URLの検査` は `パブリックURL` へのアクセス状況が確認できるので モバイルで見ていてうまくいかないとき等 問題点の洗い出しに役立つのでおすすめな機能です。

もしも Host の詳細な内容が知りたいでしたら コマンドリファレンスをご確認ください。

https://learn.microsoft.com/ja-jp/azure/developer/dev-tunnels/cli-commands#connect-to-a-dev-tunnel

以上。
【OpenAI ChatGPTクリスマスイベント第６日目】Advanced voice with videoだぁー


　どうも、カーブミラーです。

　今回は、OpenAIのクリスマスイベント。今日は第６日目。Advanced voice with videoですよ。

:::note info
本記事は、ChatGPTについての
記事です。　　　　あしからず。
:::
　ChatGPT等の動作状況を知らせる
　　OpenAIのステータスページ。
　　　[OpenAIステータス](https://status.openai.com/)

　昨日（2024/12/12）の
　　4時間オーバーのアクセス不可は
　　　サーバの設定変更が原因でした。

　[edwinさんポスト](https://x.com/edwinarbus/status/1867091090475716847?t=37gJzydxZqrXDAQnD7-hMw&s=19)
>（DeepL翻訳）
>“OpenAIの障害は12 Days of OpenAIやApple Intelligenceとは無関係でした。 私たちは多くのサーバが利用できなくなるような設定変更を行いました（主な影響範囲はPT 3:16-7:38pm）”

　ChatGPT Proユーザーは
　　代替できる生成AIがなくて
　　　困っていました。

　それだけではなく、
　　いくつかのChatGPTを使った
　　　サービスも停止を余儀なく
　　　　されていました。

　代替手段は
　　見つけておきましょう。
　　　とはいえ、o1-Proユーザーは
　　　　どうにも動けませんけど😅
　　　　　今後に期待しましょう。
***
　さて、さっそく【本題】です。

　OpenAIの
　　クリスマスイベントの第６日。
　　　まずはごあいさつ。
　　　　[OpenAI公式ポスト](https://x.com/OpenAI/status/1867265721287458851?t=mc_KKw0Q5XoZetWqVmaDrg&s=19)
　　　　　中身は、OpenAIの
　　　　　　イベントページへの誘導。

　イベントのようす。
　　[OpenAI公式YouTube動画](https://x.com/OpenAI/status/1867292997660160061?t=_XnR5RH1e5xfikks5Rd5xQ&s=19l)

　今回は？

　Advanced voice with video。

　ChatGPTの
　　高度なボイスモードに
　　　カメラ映像の認識機能が
　　　　統合されました。

　以前に
　　発表されていた機能です。

　イベントを撮影した動画では、
　　スマホのカメラで撮影した人物が
　　　かぶっている帽子を
　　　　認識している様子や
　　　　　コーヒーを注ぐ場面では
　　　　　　入れ方の助言をする
　　　　　　　様子などがありました。

　Plus、Teams、Proユーザーは
　　今日から来週中に
　　　順次、開放されていく予定。

　Enterprise、Eduユーザーは
　　来年初頭の予定。

　EUをはじめとした
　　ヨーロッパ方面は
　　　おそらく、後日の開放になる？

　開放されると、
　　音声会話のボタンが
　　　雪の結晶になるようです。
　　　　みんなで待ちましょう。
　　　　　私も待ちます😸

　利用している動画は
　　こちらのポストを
　　　参照してください。
　　　　なお、こちらの動画は
　　　　　OpenAIが発表した過去の
　　　　　　ものになります。
　　　　　　　[チャエンさんポスト](https://x.com/masahirochaen/status/1867337243070791743?t=NQVWnuysBOmjlj_JPwnZGw&s=19)

参考：
　[ChatGPT研究所さんポスト](https://x.com/ctgptlb/status/1867273710991991063?t=J1SxwcTfngEvNVehcP-lrw&s=19)

　[ダイブツさんポスト](https://x.com/habatakurikei/status/1867273822446981402?t=JosZojw8P3V0JXqNidgAUQ&s=19)

　[エクセル兄さんポスト](https://x.com/excel_niisan/status/1867272490067877999?t=2itxXLUj_H3dlESjlFh-kQ&s=19)

　[ITmedia AI+ニュース](https://www.itmedia.co.jp/aiplus/spv/2412/13/news105.html)

　[木内翔大さんポスト](https://x.com/shota7180/status/1867336468588638387?t=rVcc79puJLlmON3uq62EKA&s=19)

　[エクセル兄さんポスト](https://x.com/excel_niisan/status/1867294288792682657?t=VUKLgSHRD9TkUSKqq0XslA&s=19)
　　（こちらは
　　　イベントのようすに
　　　　字幕があります）
***
　それからオマケ😸

　Advanced voice Modeで
　　サンタさんと会話を
　　　しましょう。

　ChatGPTアプリ版で
　　音声会話をはじめると、
　　　サンタさんが
　　　　お相手をしてくれます。

　今月末まで
　　続けるそうだよ。

　なんか履歴は
　　残らないみたい😸

　みなさんの
　　作品制作の糧に
　　　なれば、幸いです。

　今回は、ここまで。
事業の要望をどう施策に落とし込む？PdMが語るUI改善の実践ノウハウ

## **はじめに**
こんにちは、株式会社TRAILBLAZERのソリューション事業部でPdMを担当している清河です。

プロダクト開発を進める中で、UI改善に対する考え方や実際にチェックすべきポイントについて、具体的な事例を交えながらお話しします。特に今回は、ビジネス部門や事業部門から寄せられる要望への対応に焦点を当てます。

## **目次**
1. [よくある要望への対応](#1-よくある要望への対応)
2. [まず確認すべきポイント](#2-まず確認すべきポイント)
3. [効果的な施策を考えるには](#3-効果的な施策を考えるには)
4. [意思決定をスムーズにするために](#4-意思決定をスムーズにするために)
5. [まとめ](#5-まとめ)

## **1. よくある要望への対応**
新規ページやLP（ランディングページ）を作成したものの露出箇所が限られ、十分なパフォーマンスが得られない。こうした状況において、以下のような要望が、実装後の画面イメージと共に挙がってくることがあります。

>**"関係者から不満の声が出ているため、××ページの△△部分にバナーを配置してトラフィックを増やしたい。"**

表面的な作業は簡単で、要望通りに進めれば満足感を与えることができます。しかし、これは本当にサービス全体の成長や課題解決に繋がるのでしょうか？

## **2. まず確認すべきポイント**
要望が寄せられた際には、次のような基本的な確認事項を明確にする必要があります。

### 課題の特定
要望の背後にある課題を掘り下げましょう。例えば以下のようなものが考えられます。
- 露出場所が少ないことが原因か？
- CTR（クリック率）が低いことが問題か？
- PV（ページビュー）が足りていないのか？
- LPでの離脱率が高いのか？
- CV（コンバージョン）が少ないのか？

### 目的の明確化
課題が何であるかに加え、解決することで達成したい目的を明確にします。
- ステークホルダーの不満を解消することが主目的なのか？
- LPへのトラフィックを増やすことが重要なのか？
- CVの増加が最優先なのか？

例として、
**課題** ：LPへの送客が少なくCVが不足している
**目的** ：送客とCVを増加させる
と仮定して話を進めます。

## **3. 効果的な施策を考えるには**
### 期待できる効果
設定した目的をどれだけ達成できるかを評価します。たとえば、送客数を増やすための施策案として以下が考えられます。
- 閲覧数の多いページに露出を増やす
- ファーストビューに露出を出す
- LPの訴求内容とマッチする魅力的なデザインやコピーを用意する

その際、どのページに露出させるか、どの位置に露出させるかを検討するためには以下の情報が必要になります。これらの情報はGA4やヒートマップを用いて確認しましょう。
- ページ全体のPV数やUU数（ユニークユーザー）のデータを確認する
- 配置場所の前後のインプレッション数やCTR

### リスクの評価
施策が持つリスクも同時に考慮する必要があります。

**既存コンテンツやユーザーへの影響**
新しいコンテンツの追加で既存の配置が下がる場合、インプレッション数やクリック数の減少リスクがあります。その影響が大きい場合は、代替案を検討する必要があります。

**ユーザー体験の損失**
配置するページが施策と無関係な文脈を持つ場合、広告感が強まりユーザーの離反を招く可能性があります。この点も十分考慮が必要です。

## **4. 意思決定をスムーズにするために**
効果とリスクを事前に定量化することで、迅速で合理的な意思決定が可能になります。
### 評価軸の設定
以下ような基準を用いて施策を評価しましょう。

**効果**　：1日あたりの送客数やCVの増加見込み
**リスク**：離脱率や既存クリック率への影響
**コスト**：実装に必要なリソースや時間
**即効性**：短期間で成果を出せるか

リスク指標は切り戻しの判断として利用することも可能です。施策実行後、
>離脱率が△％を超えたら切り戻す

というルールを設けておくのも良いでしょう。
こうした基準を事前に共有し、関係者の合意を得ることでスムーズに施策を進められます。

## **5. まとめ**
プロダクト開発におけるUI改善や施策の意思決定で重要なのは、

1. 課題の特定
2. 目的の明確化
3. 効果とリスクの評価
4. 定量的な根拠に基づく意思決定

これらを押さえた上でサービスを成長させることが理想です。

最後に、私たち株式会社TRAILBLAZERは共に挑戦し、サービスを共創していく仲間を募集しています。詳細はこちらからご覧ください。

https://hrmos.co/pages/trail-blazer
Webアプリでソート機能の実装（リアルタイム）

# 実現したいこと
以下のような画面を実装したい。ソート、検索はリアルタイム表示。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2746730/34cbaf34-3717-e2c3-5419-a5aeb0e423da.png)

## 1. フロントエンド
- HTML/CSS/JavaScript
    - 基本的なUIを作成するために使用
- JavaScriptフレームワーク/ライブラリ
    - React.jsやVue.js、Angularなどを使用して、リアルタイムで更新可能なインタラクティブなUIを構築
    - 状態管理（State Management）には、Reactの場合ReduxやReact Contextを活用
データテーブルライブラリ
- DataTables.js（jQueryベース）
    - AG Grid、Material-UI Data Grid（React向け）
    - Vuetify Data Table（Vue向け）
    これらのライブラリは、検索、ソート、ページング機能が組み込まれており、カスタマイズも可能

## 2. バックエンド
- APIの提供
    - REST APIまたはGraphQL APIを設計して、データの取得やフィルタリング、検索機能を提供
    - フレームワーク例:
        - Python: Flask、Django
        - JavaScript: Express.js、NestJS
        - Java: Spring Boot
        - PHP: Laravel
        - Go: Gin、Echo
- データベース検索の最適化
    - 大量データに対する検索やフィルタリングを効率化するため、インデックスを設定
    - データベース例:
        - RDBMS（MySQL、PostgreSQL）
        - NoSQL（MongoDB、DynamoDB）
    - フィルタリングや検索のためにクエリを構築
        - 例: SQLでWHEREやORDER BYを活用
## 3. リアルタイムの更新
- **WebSocket**または**Server-Sent Events (SSE)**
    * データが更新されるたびにリアルタイムでフロントエンドにプッシュする。  
    * ライブラリ:  
      * **Socket.IO**（Node.js用）  
      * **Django Channels**（Python用）
- ポーリング
    * 一定間隔でバックエンドから新しいデータを取得
    * 簡易的な方法として**setInterval**や**Axios**を使用
## **4\. デプロイ・運用環境**
* **クラウドサービス**  
  * AWS（Amazon Lambda、API Gateway、DynamoDBなど）  
  * GCP、Azureも選択可能
* **CDNやキャッシュ**  
  * **CloudFront**や**Redis**を使用してレスポンスを高速化
## 実装例
- 検索とソート機能を持つReactベースのアプローチ
    - 1.React + Material-UI Data Gridを使用

```ruby:javascript
import * as React from 'react';
import { DataGrid } from '@mui/x-data-grid';

const columns = [
  { field: 'id', headerName: 'No', width: 100 },
  { field: 'service', headerName: 'サービス名', width: 250 },
  { field: 'usage', headerName: '現在の使用量', width: 200 },
  { field: 'limit', headerName: 'AWS無料利用枠の使用制限', width: 300 },
];

const rows = [
  { id: 1, service: 'Amazon SNS', usage: '3 Requests', limit: '1000000 Requests' },
  { id: 2, service: 'Amazon SQS', usage: '5 Requests', limit: '1000000 Requests' },
];

export default function App() {
  return (
    <div style={{ height: 400, width: '100%' }}>
      <DataGrid rows={rows} columns={columns} pageSize={5} checkboxSelection />
    </div>
  );
}
```
## 2. APIを用いた検索機能のバックエンド例 (Node.js)
```ruby:javascript
const express = require('express');
const app = express();

// データ例
const services = [
  { id: 1, service: 'Amazon SNS', usage: 3, limit: 1000000 },
  { id: 2, service: 'Amazon SQS', usage: 5, limit: 1000000 },
];

// 検索API
app.get('/services', (req, res) => {
  const query = req.query.q || '';
  const filtered = services.filter(s => s.service.toLowerCase().includes(query.toLowerCase()));
  res.json(filtered);
});

app.listen(3000, () => console.log('Server running on port 3000'));
```
## 3. リアルタイム更新を加える (Socket.IO)
- サーバ側でデータ更新を検知し、WebSocketを介してフロントエンドに通知

## フロー図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2746730/302d8cce-1d74-8969-96f9-1f5cf30e0932.png)

## 関連情報（開発の実装ステップを解説）
https://qiita.com/aiueo1122/items/3492de1575b50797aedd
Go言語のMac環境構築における躓き備忘録(2024)

HRBrain Advent Calendar 2024 17日目の記事です。

https://qiita.com/advent-calendar/2024/hrbrain

## はじめに
こんにちは。yk_engrです。

Go言語で本格的に開発を進めるにあたり、ローカル環境の構築を改めて行うことにしました。その際に少し戸惑った点を備忘録として残しておきたいと思います。


## 記事作成時のスタック
Go 1.23.2
MacBook Air M3


## Go言語自体のインストール方法、バージョン管理
公式サイトのインストール方法に従えば問題ないです。
https://go.dev/dl/

Go言語は後方互換性があるため、特定のプロジェクトで古いバージョンを固定する必要がない限り、最新のGoをインストールすれば問題ありません。
(インストールしたら、`$GOPATH`が`$HOME/go`に自動で設定されるはず)

なお、Homebrewでのインストール方法もありますが、ここでは割愛します。


## モジュールモード
Go 1.11から、モジュール機能が導入され、それ以前のバージョンとの違いは以下のように呼び分けられています。
- GOPATHモード: バージョン1.10以前のパッケージ管理方法
- モジュールモード: バージョン1.11以降のパッケージ管理方法
モードによって、さまざまな部分で挙動が異なるので注意が必要です。

### モードの切り替え
`$GO111MODULE`でモードを切り替えられます。
- `$GO111MODULE=on` -> モジュールモード
- `$GO111MODULE=off` -> GOPATHモード
- `$GO111MODULE=auto` -> go.modがあればモジュールモード

Go1.16以降は、`$GO111MODULE=on`がデフォルトで、モジュールモードが推奨されているため、この環境変数は触らない方が良いです。


## ディレクトリ構造
Go1.11以降ならば、どこでも好きなところにプロジェクトを作成しても大丈夫です。

### github.comを含めるか
ローカル専用のプロジェクトであれば自由に作成して問題はないですが、将来的にGitHubに公開する可能性がある場合は、モジュール名をGitHubのリポジトリURLと一致させておくと良いと思います。

### プロジェクトの新規作成
```shell_session
$ mkdir myapp
$ cd myapp
$ go mod init myapp    // go.modファイルが作成される
```


## パッケージ管理
Go言語では、パッケージ管理にgo.modとgo.sumを用います。(モジュールモードの場合)
- go.mod: モジュール名と依存モジュールのバージョンが記載される
- go.sum: 依存モジュールのチェックサム情報が記録される


## パッケージの追加
基本的には、以下で問題ないです。
1. パッケージをインポート
```go
import "github.com/gin-gonic/gin"
```
2. go mod tidyを実行
```shell_session
$ go mod tidy
```
必要な依存関係はgo.modとgo.sumに追加され、依存関係のキャッシュは`$GOMODCACHE`が設定されていればそのディレクトリに、設定されていなければ`$GOPATH/pkg/mod`に保存されます。

特定のバージョンをインストールしたい場合は、`go get`を使います。
```shell_session
$ go get <package-name>@v1.2.3
```
必要なパッケージが自動的にダウンロードされ、`go.mod`と`go.sum`に追記されます。


## CLIツールのインストール
`go install`を使います。(Go1.16以降)
- goplsのインストール例
```shell_session
$ go install golang.org/x/tools/gopls@latest
```
上記のコマンドを実行すると、`$GOBIN`が設定されていればそのディレクトリに、設定されていなければ`$GOPATH/bin`にインストールされます。

## キャッシュの削除
- ビルドキャッシュのクリア
```shell_session
$ go clean -cache
```
- モジュールキャッシュのクリア
```shell_session
$ go clean -modcache
```


## まとめ
Go言語は比較的新しい言語で、特にGo1.11以降とそれ以前では変更点が多く、混乱しやすい部分があると思います。
今後、もしGo言語を触らなくなったときでも、この記事を見れば基本的な内容を思い出せるようにしたいと考えました。


## PR
株式会社HRBrainでは新しいメンバーを募集中です。
興味がある方は下記のリンクからよろしくお願いいたします。

https://www.hrbrain.co.jp/recruit
OMCB028D(954)

https://onlinemathcontest.com/contests/omcb028/tasks/10103

・$1〜10$の和は$55$
・$A$と$B$の和が等しい
から、$C$は奇数です。

・$C$は$4$枚で和が$30$以上
・$C$は奇数
・$\Sigma_{k=7}^{10}=33$
から、$C$は$31$か$33$です。

$C$の条件は、
・$6+8+9+10$ $…①$
・$4+8+9+10$ $…②$
・$5+7+9+10$ $…③$
・$6+7+8+10$ $…④$
のどれかです。

$①$の場合、
$A,B$は$1,2,3,4,5,7$です。
すべての積の素因数分解は$2^3×3×5×7$となり、$16$で割り切れないので、この条件は不成立です。

$②$の場合、
$A,B$は$1,2,3,5,6,7$です。
すべての積の素因数分解は$2^2×3^2×5×7$となり、$16$で割り切れないので、この条件も不成立です。

$③$の場合、
$A,B$は$1,2,3,4,6,8$です。
すべての積の素因数分解は$2^7×3^2$となり、$16$で割り切れます。

$④$の場合、
$A,B$は$1,2,3,4,5,9$です。
すべての積の素因数分解は$2^3×3^3×5$となり、$16$で割り切れないので、この条件も不成立です。

よって、$A,B$は$1,2,3,4,6,8$であることがわかります。
$1+2+3+4+6+8=24$なので、$A=B=12$で、$2$つに分けると、
・$(8,4),(1,2,3,6)$ $…⑤$
・$(8,3,1),(2,4,6)$ $…⑥$
のどちらかです。

$⑤,⑥$の積はそれぞれ、
$8×4=2^5$ $…⑤_L$
$1×2×3×6=2^2×3^2$ $…⑤_R$
$8×3×1=2^3×3$ $…⑥_L$
$2×4×6=2^4×3$ $…⑥_R$
で、$⑤_L$と$⑥_R$は$16$の倍数なので、$B$になり得ます。

したがって、$A$として考えられる組み合わせは、$(1,2,3,6)$と$(1,3,8)$です。
これらの積の和は、
$1×2×3×6+1×3×8=36+24=60$
です。
かなり邪道な方法でXcode 15.xをmacOS sequoia環境で使用するtips

## はじめに

現在プロジェクトの都合上、Xcode 15.3を使用しており、Xcodeのサポートページの最低サポートOSバージョンに、<ins>macOS Sonoma 14</ins>と記載がありました。

![Screenshot 2024-12-13 at 10.16.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3952446/5b0d1d84-209a-9339-7b4d-a3167a503886.png)

引用元:

https://developer.apple.com/support/xcode/

それなら、macOS Sequoiaにアップグレードしても問題なかろうとアップグレードして開こうとしたところ、

![Screenshot 2024-12-13 at 10.28.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3952446/26fa9e8b-6c26-db6b-9537-ca91877cad0e.png)

**開けなかった**ので、関連情報セクションに記載の記事中の少し邪道な方法で解決できたため、紹介します。

## この記事で解決できること

- macOS SequoiaでXcode 15.xxが使用できるようになる
- (副次的効果)macOS Sequoia上のXcode 16上で使用可能なPredictive Code Completion機能が使用できるようになる

参考: Xcode 16以降から導入されたPredictive Code Completionについて

https://developer.apple.com/documentation/xcode-release-notes/xcode-16-release-notes

## 解決方法

Xcodeの**起動スクリプト**を実行すると、正常に起動しました。


### マニュアルに実行する場合

<ol>
  <li>Finderを開き、<code>⌘ + A</code>でApplicationディレクトリに遷移（画像ではXcodeのバージョン16と区別するために、Xcode_153にリネームしています）
    <br>
    <br>
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3952446/5dfd9a3c-d55d-8b9e-afd5-6abd64675865.png" alt="Application Directory">
  </li>
  <br>
  <li>Xcode 15.xxxのアプリアイコンを右クリックして、<code>Show Package Contents</code>をクリック
    <br>
    <br>
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3952446/d23c2b5f-f6ae-342d-f047-dd629eb047e6.png" alt="Show Package Contents">
    <br>
  </li>
  <br>
  <li>以下のディレクトリまで遷移
    <br>
    <pre><code>./Contents/MacOS</code></pre>
  </li>
  <br>
  <li><code>Xcode</code>スクリプトを実行
    <br>
    <br>
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3952446/256bbfee-0b17-c1e3-748f-9afce10ef3f0.png" alt="Execute Xcode Script">
  </li>
</ol>


### シンプルに実行する場合

<ol>
  <li>Finderを開く</li>
  <br>
  <li>⌘ + Shift + Gで表示されたwindowに以下のパスを入力(アプリ名はよしなに書き換えてください)
    <br>
    <pre><code>
/Applications/{Xcodeのアプリ名}.app/Contents/MacOS/Xcode<br>
      <br>
// アプリ名が`Xcode`の場合は以下の通り<br>

  /Applications/Xcode.app/Contents/MacOS/Xcode
  </li>
  <br>
  <li>Xcodeスクリプトを実行</li>
</ol>

## まとめ

いかがでしたでしょうか？
今後も定期的にアップしますので、何かお気づきの点や、ここをこう改善した方が良さそうなど是非是非コメントお待ちしております！

## 参考にした元の記事

https://stackoverflow.com/questions/78996419/xcode-15-is-not-running-in-macos-sequoia
資産利用状況を計測するのに役立ちそうな情報

社内で、資産利用状況を計測・分析するのに役立ちそうな情報を列挙。
SharePoint利用を前提とする。

https://mofumofupower.hatenablog.com/entry/DLcounter_SPO

https://qiita.com/love_beer/items/f408fe536b3e5a8e4a74

https://shanqiai.lekumo.biz/sharepoint_technical_note/2020/01/sharepoint-online-sharepoint-viewers-feature/comments/?p=2

https://qiita.com/DaddyDaddy/items/8a9d60aaf58ae1616fb0

https://www.illuminate-j.jp/blog/teams-fileliked

https://www.softbanktech.co.jp/special/blog/it-keyword/2020/0008/



https://qiita.com/cemaimai/items/4dcd0fa9041b90f044d1

https://www.atlassian.com/ja/itsm/service-request-management