OmniAICreator/Qiita-1.07M huggingface dataset:
NetSuiteとデジタル署名サービス（DSS）の一般的な連携フロー（フロー図再利用可）

**「NetSuiteからボタンひとつで電子署名を依頼できたら、便利だと思いませんか？」**

ビジネスにおいて、契約書や見積書への署名プロセスは避けて通れない重要なステップです。本記事では、NetSuiteと汎用的なデジタル署名サービス（DSS）の連携の流れをわかりやすくご紹介します。NetSuiteユーザー、管理者、そして開発者の皆さまが、電子署名やその他のサービス導入を検討する際のご参考となるよう、実際のイベントの流れや情報のやりとりを整理しました。ここでは、DSSプロバイダーが提供するSuiteAppを活用するケースを例に取り上げています。

※SuiteAppとは、NetSuiteプラットフォーム上で提供される、機能拡張アプリケーションです。[SuiteApp.comで利用可能な、デジタル署名サービス（DSS）の例はこちらです。](https://www.suiteapp.com/search?keywords=esignature)

<br>


**NetSuiteとデジタル署名サービス（DSS）の一般的な連携フロー**
![NetSuiteとデジタル署名サービス（DSS）の典型的な連携フロー.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3431564/c135522e-69b5-4d05-8752-17d528e0be03.png)
[※「NetSuiteとデジタル署名サービス（DSS）の一般的な連携フロー.drawio」（© 2025 Takusuke Fujii）は、CC BY 4.0（原作者名の表記が必要）で自由に共有・改変・配布可能ですが、無保証につき著作者は一切責任を負いません。](https://drive.google.com/file/d/1F9KPMjE7dGhaGVyeEvTizslfkas-Ug3-/view?usp=sharing)
<br>

**a. 主な構成要素**
1.	NetSuiteアカウント／環境（DSS SuiteApp がインストール済み）
・DSSとの連携に必要なカスタムレコード、スクリプト、設定をSuiteAppが提供。
・ドキュメントの送信やステータス更新などを管理する SuiteScript（例：ユーザーイベントスクリプト、RESTlet など）を含む。
2.	DSS（デジタル署名サービス）
・電子署名の機能を提供し、署名対象ドキュメントをまとめる「コンテナ（エンベロープ）」を管理。
・署名依頼を受信者に送信し、完了後に NetSuiteに通知を返す。
3.	エンドユーザー／署名者
・メールなどで署名依頼を受け取り、DSS画面を通じて署名を行う顧客、パートナー、従業員など。
<br>

**b. 典型的なフローの概要**
NetSuiteとDSS間における情報やドキュメントのやり取りと、各システムにおけるユーザー操作の対応関係です。

**b1. NetSuite側**
1. NetSuite上でのユーザー操作
・NetSuiteユーザーがレコードを開く（例：顧客、見積、受注、請求書、その他のレコード）。
・SuiteAppが提供する「デジタル署名依頼を送信」といったカスタムボタンをクリック、またはその他スクリプトが実行される操作を行う。

2. SuiteScriptがDSS APIを呼び出す
・SuiteAppが、必要なドキュメント（PDFなど）および署名者情報を、NetSuiteフィールドから取得。
・連携の設計によって以下のいずれかを実施：
　- SuiteScriptがDSSのAPIを呼び出して、新しいDSSの「コンテナ（エンベロープ）」を作成する。
　- SuiteScriptがSSO（シングルサインオン）や安全な認証フローを介して、別のブラウザータブでDSSの画面を開き、ユーザーがドキュメントおよび署名者情報を手動で確認（編集）する。

**b2. DSS側**
1. DSS上でのユーザー操作（別のDSS画面を使用する場合）
・DSSの画面上で、ユーザーがドキュメントと署名ワークフローを確認。
・ユーザーが「送信」等のボタンをクリックしてコンテナを確定し、署名依頼メールを受信者に送信。
2. DSSがメールを送信
・DSSは署名用ポータルへの安全なリンクを含むメールを、指定された署名者に自動送信。
3. 署名者がドキュメントに署名
・署名者（受信者）はリンクを開き、ドキュメントを確認し署名する。
・DSSは署名を取得し、全ての署名者が署名を完了すると、ステータスを「完了」などに更新。
4. DSSがNetSuiteに通知
・DSSはWebhookを介してNetSuiteに通知を送るか、またはSuiteAppがDSS APIを定期的にポーリングして、ステータス更新を取得。
・いずれの場合でも、NetSuiteは署名完了の最終ステータスを受け取る。

**b3. NetSuite側**
1. NetSuiteがレコードを更新
・署名完了の通知を受け取ると、NetSuiteは該当レコードのステータスを「署名済み」／「完了」などに変更し、そのレコードへ署名済みのPDFを添付する。
・必要に応じて、NetSuiteは見積から受注を生成したり、カスタマーサポートへの通知をしたり、外部システムへトランザクションを送信するといった、後続アクションを行うこともできます。
<br>

**c. まとめ**
上記の基本的な流れを応用することで、NetSuiteとデジタル署名やその他のサービスとの連携をよりご活用頂けますと幸いです。
<br>

[※一般的なデジタル署名サービスに関する情報は、「OASIS Digital Signature Service Overview」を参考にしています。](https://docs.oasis-open.org/dss/v1.0/oasis-dss-1.0-overview-cd-r1.html)
<br>
© 2025 Takusuke Fujii
本記事は CC BY 4.0（原作者名の表記が必要）で自由に共有・改変・配布できますが、無保証につき著作者は一切責任を負いません。
AIエンジニア（インターン）採用への必要スキル

# 初めに
私がAIエンジニアとして、長期インターンを経験してから約1年の期間が経過しました。（厳密には11か月）
その中でエンジニアとして働くために最低限何が必要なのかを学んだため、紹介していきたいと思います。
紹介したスキルを身に着けることで、AIエンジニアインターンの採用率は格段に上がると思います。

# 必要スキル一覧
- AtCoder茶色ランク相当のアルゴリズム実装能力
- 機械学習・深層学習システムの構築経験
- Git・Github利用経験
- Linux利用経験
- Dockerによる環境構築経験
- テストの実装経験

# 必要スキルに関する説明
## AtCoder茶色ランク相当のアルゴリズム実装能力
アルゴリズム実装能力は高ければ高いほど良いのには違いないのですが、最低限として基本的な実装はでき、計算量も意識しながら実装できる能力があれば十分ということで、Atcoder茶色ランク相当としました。茶色になるためには以下の記事を参考にすると良いと思います。

https://qiita.com/pippo1222/items/47ae38da0bd0913e77a6

緑・水色レベルの実装力になると、アルゴリズム実装面において実力不足で困ることは少ないと思うので、できる方は、是非目指した方が良いと思います。

https://atcoder.jp/

## 機械学習・深層学習システムの構築経験
これに関しては以下の2段階で取り組むのが良いと感じます。
- kaggleに参加し、ipynbで1から前処理・学習・推論のシステムの構築について実践的なデータセットから学ぶ
- ローカルで環境を構築し、Pythonファイル(.py)によってkaggleで作成したシステムのようなシステムを構築する

kaggleでは実践的なデータセットでのモデル構築について学ぶことができるので積極的に大会に参加して、実装力を見つけると良いです。

https://www.kaggle.com/

しかし、実務では簡単な分析で.ipynbを利用しますが、ほぼPythonファイル(.py)でシステムが構築されます。そのため、環境構築方法・パスの通し方、コマンドからの実行などで躓くことがあるので、一度、Pythonファイルでシステムを構築した方が良いと思います。また、Githubに載せることでポートフォリオにできるのでおすすめです。

## Git・Github利用経験
Gitは実務・個人開発の両方で重要です。詳しい説明は省きますが、簡単にいうと、コードの変更履歴を管理できるシステムで、高確率で利用することになります。
以下を読んでもらうと理解できると思います。

https://backlog.com/ja/git-tutorial/

Githubに関しては、先ほども記載しましたが、ポートフォリオとして自身のコードを載せることもできますし、リポジトリ単位でコードを管理することで、Gitでの変更履歴の確認やIssue、PRといったものを利用することが可能です。抽象的説明ですみません。
以下を読めばある程度はわかると思います。

https://www.sejuku.net/blog/7901

## Linux利用経験
Macを利用してれば、さほど問題ないと思うのですが、Windowsの場合はwslでLinux環境を構築して、そこで開発を行った方が良いです。
機械学習・深層学習を行う環境はLinuxであることが多いので、使えるようにしておくことは必須です。特にコマンドで操作できるようにしておくことが大事です。

https://qiita.com/ryome/items/240f36923f5cb989da27

https://qiita.com/savaniased/items/d2c5c699188a0f1623ef

## Dockerによる環境構築経験
これはLinux利用経験とも関係しています。
Dockerとは何ぞや？と思う方がいるかもしれないので、以下を読んでもらえば理解できると思います。

https://www.kagoya.jp/howto/cloud/container/docker/

かなり省略していうと、PC上にさらにPCを作るようなイメージです。
これは実務において、環境を汚さずに手軽に開発を行える面で重宝されています。難易度は高いと思いますが、Linux環境でのDocker利用経験があると良いです。
WindowsのDocker Desktopは商用利用でお金がかかるので、Linux環境でDockerを利用した方が良いです。

https://qiita.com/studio_haneya/items/0bc57d0c21732fc277fd

https://zenn.dev/pion24/articles/wsl2-ubuntu-docker_install

## テストの実装経験
これは実務で良いシステムを作成する上で必須となります。
例えば、実行に数時間かかるシステムを構築したとして、変更するたびに実行して確認するのはかなり効率が悪く、確認をしなければエラーが発生しているのかわからない状態になります。
そこで、テストが必要となります。関数単位でテストを作成したり、軽量なダミーデータで実行を行うようなテストを作成したりすることで、短時間でエラーを確認することができます。

https://qiita.com/vZke/items/868eb9fd5289d2a25660

# 最後に
具体的な説明というよりかは、簡単な紹介になってはしまったのですが、参考になれば幸いです。
量子ビットをイメージでつかむ（量子鍵配送BB84編）

　[一般社団法人日本量子コンピューティング協会](https://www.jqca.org/)様が量子エンジニア（ゲート式）アドバンスコースの第２回の[教材](https://docs.google.com/presentation/d/1rw0B5QxWwYAYKGvUw2-tcJW9Y95T5kp5oyThY_uk6Sc/edit#slide=id.g33a71d7f228_0_357)を上げていただいているので、勝手ながら解説してみます。第２回は（量子暗号（通信）と呼ばれることも多い）量子鍵配送がテーマです。量子鍵配送の代表例にはBB84とE91がありますが、本記事はBB84を取り上げます。E91は[こちら](https://qiita.com/sin-gee/items/25fb408f0768f6f26921)です。例によってJupyter notebookを https://github.com/sin-gee/ImageOfQuantumBit/blob/main/ImageOfBB84.ipynb に置いておきますのでよろしければ試してみてください。

::: note info
アドレス修正しました。（2025/04/10）
:::
 ***
　BB84の量子回路は次のとおりです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3921213/d863733c-57de-4818-b42f-41aef4706179.png)
　Alice/Bobで「H」（アダーマール）を使う点、使用する/しないが一致した場合は成功、しなかった場合は失敗、成功した場合は100%AliceとBobで一致する点、Eveの盗聴を阻止する方法等、諸々E91と同じですので説明は割愛させていただきます。
　ちなみにAliceがH,Xゲートを使う/使わないとブロッホ球の関係は次のとおりです。
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3921213/2778bf51-7fe4-4e49-b63a-bfbf33a5ac50.png)
ZENRIN Maps APIでマウスホイールでの拡大縮小が完了したイベントをキャッチ

# はじめに
前回 [ZENRIN Maps APIで小学校区、中学校区を表示してみた](https://qiita.com/00b012deb7c8/items/48f2ae66bbe03ca64cfd) で
ZENRIN Maps APIに用意されているマップイベントには
マウスホイールで地図を拡大縮小した際に"操作完了"をキャッチするイベントがないことをあげました

[ZENRIN Maps APIに用意されているハンドラ](https://developers.zmaps-api.com/v20/reference/javascriptAPI/map.html#mapevents)

なので今回は、そのマウスホイール操作による地図拡大縮小の完了をキャッチする処理を作成してみます


# 準備
ZENRIN Maps API を利用しています
[無料トライアルページ](https://www.zenrin-datacom.net/solution/zenrin-maps-api/trial?fm_cp=6757baf3203e3a00bb118509&fm_mu=6763a0dd08b9bc06e741de8a&utm_campaign=6757baf3203e3a00bb118509&utm_medium=else&utm_source=Qiita60)
2ヶ月間無料で利用できます

# 方法
簡単な方法として、wheelイベントとsetTimeout()を使用します

https://developer.mozilla.org/ja/docs/Web/API/Element/wheel_event

https://developer.mozilla.org/ja/docs/Web/API/Window/setTimeout


## 基本構文
### wheelイベント
```javascript
addEventListener('wheel', (event) => {});
```
イベントハンドラ「wheel」は、
マウスホイールを操作している間イベントが発火します

### setTimeout()メソッド
```javascript
setTimeout(関数, 遅延時間);
```
遅延時間(ミリ秒)に達すると関数が実行されます

## 結論
```javascript
let wheelTimeout; // タイムアウトID ≒ タイマー
mapElement.addEventListener("wheel", function (e) { // 操作中は何度も発火する
  // 操作中は都度タイムアウトIDを破棄
  if (wheelTimeout) {
    clearTimeout(wheelTimeout);  // 古いタイマーを破棄
  }

  // 操作中はイベント発火都度、新たなタイムアウトIDが作られる
  // つまり、操作中はwheelTimeoutが上書きされ続ける
  wheelTimeout = setTimeout(() => {
    // ホイール操作が止まってもタイマーは動いているので、
    // 操作が止まって500ms経過するここの処理が呼ばれる
    alert('wheel operation completed')
    clearTimeout(wheelTimeout); // タイマーを破棄
  }, 500);
});
```


# コード全体
```html:index.html
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title></title>

    <script src="https://test-js.zmaps-api.com/zma_loader.js?key=[APIキー]&auth=referer"></script>

    <style>
      body {margin: 0; padding: 0;}
      #ZMap {position: absolute; top: 0; bottom: 0; width: 100%;}
    </style>

  </head>
  <body>
    <div id="ZMap"></div>

    <script>
      let map;
      ZMALoader.setOnLoad(function (mapOptions, error) {
        if (error) {
          console.error(error)
          return
        }

        const lat = 35.681406, lng = 139.767132;
        const mapElement = document.getElementById('ZMap');
        mapOptions.center = new ZDC.LatLng(lat, lng);

        map = new ZDC.Map(
          mapElement,
          mapOptions,
          function() {
            let wheelTimeout;
            mapElement.addEventListener("wheel", function (e) {
              if (wheelTimeout) {
                clearTimeout(wheelTimeout);
              }

              wheelTimeout = setTimeout(() => {
                alert('wheel operation completed')
                clearTimeout(wheelTimeout);
              }, 500);
            });
          },
          function() {
          }
        );
      })
    </script>
  </body>
</html>
```
量子ビットをイメージでつかむ（量子鍵配送E91編）

　[一般社団法人日本量子コンピューティング協会](https://www.jqca.org/)様が量子エンジニア（ゲート式）アドバンスコースの第２回の[教材](https://docs.google.com/presentation/d/1xp-gipPXjM1Hb2xy-kVbfxBp0OZwmRD5j6Om3zvnYW0/edit?usp=sharing)を上げていただいているので、勝手ながら解説してみます。第２回は（量子暗号（通信）と呼ばれることも多い）量子鍵配送がテーマです。量子鍵配送の代表例にはBB84とE91がありますが、本記事はE91を取り上げます。BB84は[こちら](https://qiita.com/sin-gee/items/d45d97c207d6b057c3ab)です。例によってJupyter notebookを https://github.com/sin-gee/ImageOfQuantumBit/blob/main/ImageOfE91.ipynb に置いておきますのでよろしければ試してみてください。

::: note info
アドレス修正しました。(2025/04/10) 
:::

 量子鍵配送のやろうとしていることは、0/1のビット列を2者間で安全に共有することです。それ自体はDiffie-Hellmanといった今日も存在するアルゴリズムと同じですが、それを量子でやろう、というものです。「じゃ、Diffie-Hellmanでいいじゃん」と思われそうですが、Diffie-Hellmanでは鍵の長さは有限長で、かつ量子コンピュータに対する耐性がありません。量子鍵配送では鍵長は無限長を目指します。また、Diffie-Hellmanは「盗聴されてもOK」なのに対し量子鍵配送では「盗聴されれば絶対バレる」を実現するという違いがあります。
 ***
　E91の量子回路は次のとおりです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3921213/96d5a18f-961c-45ea-8fa1-ae3a5c9ff28e.png)
 　左側は[こちら](https://qiita.com/sin-gee/items/35df4e0939cd40912da5)で示したとおり、つまりE91は量子もつれを利用しています。図の右側で示した「？」ですが次の４とおりが可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3921213/06c24413-cfec-4d58-93b9-2c66f6ca52f9.png)
　量子ビットをAlice/Bobで何個か（何百個か）測定したのち、Hを使用したか／しなかったを（古典チャネル=盗聴されたり書き換えられたりしてもかまわない通信路で）教えあいます。上２つだった場合は成功であるため測定結果を記録し、下２つだった場合は測定結果を破棄します。その上で、成功した測定結果の一部をAlice/Bobで教えあいます。成功した場合は100%同じになるハズですが、盗聴され量子ビットを書き換えられている場合はそうなりません。教えあった結果が同じかどうかで盗聴されているかどうかを判断します。
 ***
　一方、Eveはどうやって盗聴しようとするでしょうか？ [こちら](https://qiita.com/sin-gee/items/eb5005e65abda685dffd)で示したように量子複製不可能定理があるため、Eveは量子を途中で抜き取っても複製して戻すことはできません。量子の状態を知るには測定するしかEveには手がありません。といって何等か量子を送らないと量子が来ないのでBobは異変に気付きます。Eveが適当に量子を作って送るにしても、それはAliceが受け取る量子とはもつれを起こしていないものとなります。また、Eveは抜き取った量子を測定するにも基底をどうする（Hゲートを使用する／しない）かを決めなければなりません。しかし、Alice/Bobがどちらの基底を選ぶのか、Eveは知りようがありませんから、（Alice/Bobが使用する基底と一致したうちで、）Eveの選んだ基底が一致する確率は50%になります。つまり何もわからない、ということになります。
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3921213/ac5a9a7b-ed94-4499-8769-300fd82e17b5.png)
　このため、Alice/Bobで（Hを使う/使わないが一致しても）100%一致することはありません。
***
　ところで、Aliceに送られる量子はCXゲートの前後とはいえHゲートを2回作用させる場合が出てきます。$q_0$はもともと$\lvert 0 \rangle$でしたから$\lvert 0 \rangle$に戻るのではないかと思った方はいらっしゃいませんか？
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3921213/9e245ca6-775b-4a72-9c91-294228692b27.png)
 でも戻らないのです。実際、「C」がついていないXゲートの場合は、$\lvert 0 \rangle$に戻ります。
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3921213/c517e602-5904-4c0f-b023-660ae294e5a9.png)
　この現象は[こちら](https://qiita.com/sin-gee/items/62080788ed85e8360f5e)の「位相キックバック」と同様の現象です。「制御ビット」なのに他の量子ビットを制御することによって影響を受けてしまう．．．。個人的には量子アルゴリズムの、あるいは量子もつれの最も不可解にして魅力的なところと思っていますが、どうでしょうか。
【末経験からフルヌタックエンジニアへ】できないと困ること5選

Qiitaにポエムしかしたためなくなったので今回もポエムです。

# 言葉の定義
## 末経験者とは
末経験とは、大学進学の末に経験したものを糧としている人のことを指します。
## フルヌタックエンジニアとは
ヌタックとはアイヌ語で「高原」を意味するそうです。フルヌタックとは標高の高い高原で色々視界が開けてものが見えている人のことを指します。

# これができないと困ります
末経験者ならこれはできないといけない困ること5選。早速いってみましょう

## 皆さん言語はひとつって事はないですよね？
私は小学校で親からMSXを与えられたため最初に覚えたのはBASICです。しかし、大学に入ったとき役には立たず、教育用言語として勉強したのはPascalです。そこからC言語、Java、ShellScriptと色々学んでいます。勿論プログラミングスクールは通っていませんよ。
プログラミングスクール通うのは一向に構いませんが、言語なんてたくさんあるんだから、あとは好き嫌いで使えば良いんじゃないですか？
ポインタ嫌いにならないでヌルポインタと戯れる勢いくらいは欲しいところです。

## 皆さんサーバ管理やクラウド管理くらいはできますよね？
末経験者なら、おそらく通っていてる道は「サーバ・ワークステーションの管理」だと思います。自分の使っているマシンの管理くらいはできますよね？よく私の所に尋ねて来る人は末経験者で無いことをお祈りしております。自分のPCは自分で管理する。これくらいはやっても罰は当たりませんよ？
今なら、クラウド管理なんてのも必須スキルかもしれませんね。SLACKの彼方から支援士様からグタグタうるさくいってきますが、「はいはい、これ設定すれば安全なんでしょ」と言いながらクラウドと戯れましょう。そうすれば在宅勤務できます。年収4桁も夢じゃない。

## 皆さん大学で学ぶことがすべてだとは思っていないですよね？
OSI7レイヤーは大学でおそらく学びますが、レイヤー0やレイヤー8がある事はご存じですよね？社会の構造を学ぶのもフルヌタックエンジニアに必要な素養です。
大学出た後で勉強することの方が実は実社会では大切かと思います。しっかり勉強しましょう。

## 皆さん大学は真面目に行ってます(ました)よね？
大学は遊ぶところじゃないですよ、遊ぶことも大事かもしれませんが大学生の本来の責務は勉強することです。もちろん放課後は思いっきり遊んだりバイトにいそしんでも良いですけど。そこをはき違えないようにすることが肝要です。
学費払って遊ぶくらいなら、学費払わないで遊んだ方がリーズナブルではないですか？

## 皆さん専門って持っていますよね？
私はHPC大好き人間でHPCの世界にいる人です。末経験者なら専門分野を持っていて一人前かと思います。専門を持ちましょう。専門なら部署では負けない から始まって部門でも負けない、事業所では負けない、会社では負けないと幅を広げることが重要です。

# まとめ
まとめると次のような感じになります。

1. プログラミングについては「真実はいつもひとつ・アプローチは無限」
1. 管理人術は音無響子さんにまなぼう
1. 大学では見られないような人間模様を社会で知ろう
1. 大学生の皆さん真面目に不真面目やりましょう
1. 職人芸を身につけよう

さぁ、今日も勉強勉強!!
【Windows11】Excelを編集はせず参照だけしたい

Windows11にアップグレードしたところ、Excelを編集はせず参照だけしたい際に不便になってしまったので対策を行いました

## 症状

今までExcelの資料を閲覧したりレビューするときは右クリック＞新規で開くことで意図しない変更を予防していたのですが...
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3519892/adeb1f5a-8955-484d-8bf8-c1cfd14d6481.png)
Windows11では「新規」オプションが右クリック１回では表示されなくなってしまいました...:disappointed_relieved:
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3519892/98b6b3da-91e3-40d3-a5ce-41dbdda67f6e.png)
（一応、Shift+右クリックで「新規」「読み取り専用で開く」オプションが表示されます）

## 対策

専らレビュー担当で、Excelを編集することがほとんどないという方は以下の記事を参考にExcelのデフォルトの設定を読み取り専用にするのがよいと思います。

https://qiita.com/www-tacos/items/509411a36820571db003

私の場合は自分で資料の編集を行う場合もあるのでデスクトップに読み取り専用で開くためのショートカットを作成しました。

①デスクトップ等にあるExcelショートカットを複製します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3519892/f6591971-d483-4d46-9327-5f33b83d6a54.png)
②右クリック＞プロパティよりリンク先の末尾に` /r`を追加します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3519892/6878c0f5-0c61-4126-8fa5-2cb29ef5fad3.png)
③ショートカット上にファイルをドラッグ＆ドロップで読み取り専用になります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3519892/efac7f65-7a6a-4fb6-ba4b-0a5cb58c1c1c.png)

## 愚痴
本当はタスクバーに配置したかったですが、windows11ではタスクバーへのファイルのドラッグ＆ドロップもできなくなってしまったようです...
現在は特大アイコンのリンクを表示したエクスプローラを常駐させる（デスクトップだと隠れてしまうため）ことで凌いでいます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3519892/07adeaec-41bd-4f17-a97e-496a5cf93a3a.png)
toFixed(3) で小数フォーマットを爆速攻略！

「小数第3位まで表示＆不足分は0埋め」って意外と面倒じゃない？
でも `toFixed(3)` を知ったら、一瞬で解決したからシェアする！

## <br>問題概要
入力: 実数 `N`
出力: `N` を小数第3位まで四捨五入し、不足分は0埋め

<br>入力例
```
3.14159
```
出力例
```
3.142
```
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__format_real_number_step3

## <br>NG例（僕がやらかしたコード）
```js
console.log(Number(input).toPrecision(3)); // ❌ "3.14"（小数第3位が消えた…）
```
ミスの原因
✅ `toPrecision(3)` は「有効桁数3桁」なので、小数の扱いがズレる
✅ 3.14159 は 3.14 になって、小数第3位が表示されないことがある

## <br>OK例（正しいコード）
```js
console.log(Number(input).toFixed(3)); // ✅ "3.142"
```
解説
✅ `toFixed(3)` なら 小数第3位まで表示＆不足分は0埋め
✅ 自動で四捨五入（3.14159 → 3.142）
✅ 文字列として返るので、計算に使うなら `parseFloat()` で数値化

## <br>結論
✔ 小数点以下3桁が欲しいなら `toFixed(3)` 一択！
✔ `toPrecision(n)` は「有効桁数指定」なので用途が違う
✔ 「小数フォーマット問題」= `toFixed(n)` を思い出せ！

<br>[僕の失敗談と解決話!](https://paizabeginner.wordpress.com/2025/03/28/paiza%e3%81%a7%e5%9f%ba%e6%9c%ac%e3%83%9e%e3%82%b9%e3%82%bf%e3%83%bc-tofixed%e3%81%a7%e5%b0%8f%e6%95%b0%e3%82%92%e3%82%ad%e3%83%ac%e3%82%a4%e3%81%ab%e6%95%b4%e5%bd%a2%ef%bc%81/)
ジョブの実行スケジュールをグラフィカルに確認する方法

## はじめに
様々なサービスに組み込みのジョブスケジュール機能がありますが、cronのような簡易的なスケジュール機能では、長期的なスケジュールの実行日時を把握するためには手動での計算が必要な場合があります。クラウド型ジョブスケジューラーサービスを利用することで、画面上でジョブの実行スケジュールを簡単に確認できるようになり、運用の負荷が軽減されます。

## クラウド型ジョブスケジューラーサービスでできること
### 1. 直感的なスケジュール確認
マンスリー表示でスケジュールをグラフィカルに確認でき、来月などの長期的な予定も一目で把握できます。
<img width="700" alt="MonthlyCalendar.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3889837/6af8655b-8865-40c6-acbb-36c3ed513652.png">
### 2. リアルタイムでのジョブのトリガー状態の確認
ジョブが正常にトリガーできたかどうかをリアルタイムで確認できます。
※正常・異常の判定は、AWSにイベントを送信した時点で行われます。イベント送信後、実行された業務プログラムが正常終了したかどうかは、AWS上での確認が必要です。
<img width="700" alt="JobList.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3889837/db650ba4-1f86-4136-a1e5-9d25c7ef8b20.png">
### 3. 柔軟なスケジュール変更
GUIを使用してスケジュールの一時変更（実行予定の中止・変更・追加）を柔軟に行えます。一時変更の詳細については、こちらの記事をご参照ください。

https://qiita.com/hs-matsu/items/2993af78e18381405d2c

## おわりに
クラウド型ジョブスケジューラーサービスを活用することで、ジョブの実行スケジュールや実行状態を画面上で簡単に把握できるようになります。運用の負荷軽減に役立てば幸いです。

## 参考リンク
- 株式会社日立ソリューションズ
\- クラウド型ジョブスケジューラーサービス
https://www.hitachi-solutions.co.jp/jobschedulerservice/
【WPF】ファイル選択ダイアログを表示する方法【MVVM】

# ダイアログを表示したい
WPFアプリを作成しているときにダイアログを表示したい状況って多いと思います。
MVVMパターンを採用しているときにダイアログを表示する場合ってどうしたらいいのか、検索してもいろいろな方法が出てきてどれがいいんだろうとなりますよね。
今回、自分なりにしっくりきた実装を紹介したいと思います。

# 使用したライブラリ
- CommunityToolkit.Mvvm

# 実装
```MainWindow.xaml
<Window x:Class="OpenFileDialogSample.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:OpenFileDialogSample"
        xmlns:vm="clr-namespace:OpenFileDialogSample"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Window.DataContext>
        <vm:MainWindowViewModel/>
    </Window.DataContext>
    <Grid>
        <StackPanel HorizontalAlignment="Stretch" VerticalAlignment="Center" Margin="16">
            <Button Content="ファイル選択" Command="{Binding FileSelectCommand}" 
            Width="100" Margin="8"/>
            <TextBox Text="{Binding SelectedFilePath}" Margin="8"/>
        </StackPanel>
    </Grid>
</Window>
```

``` MainWindow.xaml.cs
using System.Windows;
using CommunityToolkit.Mvvm.Messaging;
using Microsoft.Win32;

namespace OpenFileDialogSample
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            WeakReferenceMessenger.Default.Register<MainWindow, FileSelectRequest>
            (this, static (s, e) =>
            {
                OpenFileDialog ofd = new OpenFileDialog();
                ofd.FileName = e.OldSelectFilePath;
                if(ofd.ShowDialog() == true)
                {
                    e.Reply(ofd.FileName);
                }
                else
                {
                    e.Reply(string.Empty);
                }
            });
        }
    }
}
```

``` MainWindowViewModel.cs
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using CommunityToolkit.Mvvm.Messaging;
using System.IO;

namespace OpenFileDialogSample
{
    internal partial class MainWindowViewModel : ObservableObject
    {
        [ObservableProperty]
        private string selectedFilePath;

        [RelayCommand]
        private void FileSelect()
        {
            var reply = WeakReferenceMessenger.Default.Send(new FileSelectRequest()
            {
                OldSelectFilePath = SelectedFilePath
            });
            if(File.Exists(reply.Response))
            {
                SelectedFilePath = reply.Response;
            }
        }
    }
}
```

``` Message.cs
using CommunityToolkit.Mvvm.Messaging.Messages;

namespace OpenFileDialogSample
{
    internal class FileSelectRequest : RequestMessage<string>
    {
        public FileSelectRequest() { }
        public string OldSelectFilePath;
    }
}
```

# WeakReferenceMessengerが便利
昔はMessengerパターンって難しくてわからないってなってたんですが、CommunityToolkitのWeakReferenceMessengerは結構とっつきやすく作られていてすんなりと実装できました。
Vtuber運営の基盤として色々構築した話（雑談＋OSS選定編）

## はじめに
みなさん、はじめまして！
はじめての投稿なので皆様温かい目でご覧いただけると幸いです。

今回は、ひょんなことからVtuberの運営にシステム面からフォローを行うことになったので、何部かにわけてお話をしたいと思います。
ここはもっとこうしたほうがええで！や、セキュリティ的にまずいから直せ！などあればどしどしコメントを頂けるとありがたいです！
## どうして関わることになったのか
メタい話ですが、知り合いにVtuberを個人でやっている人がいて、雑談してる中で独自ドメインでメールをしたいという話が上がったことがすべての始まりです。
ドメインを取得しメールをレンタルサーバで開通させた後に、サイトも開設したいという話になりーという感じです。
## 使用サーバ
VPSのOSは2台ともUbuntu24.04LTSで統一しています。
### レンタルサーバ
#### さくらのレンタルサーバ スタンダードプラン
https://rs.sakura.ad.jp/plan/standard/

コンパネが圧倒的に使いやすい。
月550円でストレージ300GB使えてしまう。
ただし、コンパネからインストールできるサービスはほぼない。
### VPS
#### さくらのVPS 1Gプラン
前に契約したのをそのまま流用。
月1000円くらい。
#### KAGOYA CLOUD VPS
今回1Gでかなりのスペック不足を感じた為、新たに契約。
月1700円ちょっとで4GB/600GBのサーバが利用できるのでコスパがとてもいい。
## 選定したOSS
### 1\. Keycloak
https://www.keycloak.org/

構築するサービスを1つのアカウントでログインさせたかった為。
（アカウント管理の手間がめっちゃ減る）
### 2\. NextCloud
https://nextcloud.com/

レンタルサーバでも簡単に導入ができ、比較的管理が楽なため。
プラグインが豊富でSSOにも対応できる。
主に画像や文書ファイルのデータ管理に使ってます。
### 3\. Outline
https://getoutline.com/

Notionライクに扱えるMarkdown・HTML対応Wikiツール。
複数人での同時編集が可能で、書いた文章の一般公開も気軽にできる。
Outline単体ではアカウント管理ができないので、アカウントはSlackやGoogle、OpenID等の外部認証システムに依存します。
主にWebサイトの下書きやタスク管理に使ってます。
### 4\. WordPress
https://ja.wordpress.org/

いわずもかな、定番のWebサイト作成ツールです。

### 5\. Nginx
https://nginx.org/

高性能・軽量を兼ね備えたWebサーバ。
今までApache派でしたが、今回リバースプロキシを多用するのでNginxに初挑戦してみました。
## おわり
次回からは各OSSの構築方法を書いていきたいと思います！
✨ChatGPT関連のおすすめ講座4選！自分だけのGPTを作成して、デプロイまで学べる完全ガイド🚀

こんにちは、韓国在住のsanaです！

最近、AIといえばChatGPTが注目を集めています🤖。この記事では、Azureを使って独自のGPTモデルを作成し、デプロイする方法から、Streamlitを使ったGUIの実装方法まで学べる4つの素晴らしい講座を紹介します。AIやChatGPTに興味がある方、**LLM**を活用したい方にぴったりの内容です！


ChatGPTやLLMに興味がある方必見！
:writing_hand:Azureを使って自分だけのGPTモデルを作成し、デプロイする方法
:writing_hand:Streamlitを使ったGUIの実装方法
:writing_hand:Whisper AIやDALLE.2などの生成型AIの活用方法
:writing_hand:Langchainを使ってより強力なLLMサービスを作成する方法も学べます！

詳細な内容を知りたい方は、各講座をチェックして、自分だけのAIサービスを構築してみましょう✨


:star:おすすめ講義:star:

https://u.inf.run/41OzDDr

https://u.inf.run/4llbxrI

https://u.inf.run/442hT8V

https://u.inf.run/4j0NYCu
Microsoft SentinelのKQL、アラート、脅威インテリジェンスのメモ

以下のメモ(基本というより、局所的な内容メモ)

- KQLのクエリと仮想テーブル 
- Microsoft Defender のアラートと対応テーブル
- Threat Intelligence における Indicator（IOC）の考え方  

## KQLのクエリと仮想テーブル

KQL で実行されたクエリの結果はすべて仮想テーブル（Virtual Table）として扱われます。これにより、柔軟にクエリ同士を組み合わせたり、さらに加工したりすることができます。

また、KQLでは関数（function）を作成して、クエリロジックを部品化することもできます。これによって再利用性が高まり、長いクエリを簡潔に管理できます。

以下は関数を使ってエラーイベントだけを抽出する例です。

```kql
.create function GetRecentErrors() {
    EventLog
    | where EventLevel == "Error"
    | where Timestamp > ago(1d)
}
```

この関数は呼び出すだけで仮想テーブルのように使えます。

参考: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/functions/

## project演算子とbin関数の使い方

### project 演算子

project 演算子は、列の選択や名前変更、新しい列の定義などに使います。SQLの SELECT に似ていますが、より明示的で列操作に特化しています。

```kql
DeviceEvents
| project Timestamp, DeviceName, ReportId
```

### bin 関数

bin 関数は主に時間や数値を一定の区切りにまとめたいときに使います。特に timechart と組み合わせて時間単位での集計を行う際に便利です。

```kql
SecurityEvent
| summarize count() by bin(TimeGenerated, 1h)
```

参考: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/binfunction

## Microsoft Defender のアラートと対応テーブル

Microsoft Defender for Endpoint などのセキュリティ製品から送られるアラートは、`SecurityAlert` テーブルに格納されます。このテーブルには製品名、アラートの種類、検出内容、発生時刻などが含まれます。

```kql
SecurityAlert
| where ProductName == "Microsoft Defender for Endpoint"
```

また、複数のアラートを一つにまとめたインシデント情報は `SecurityIncident` テーブルに記録されます。

| テーブル名       | 目的                                   |
|------------------|----------------------------------------|
| SecurityAlert     | 個別のアラート情報。技術的で詳細なログ |
| SecurityIncident  | 関連アラートをまとめた調査・対応の単位 |

参考: https://learn.microsoft.com/ja-jp/azure/sentinel/data-connectors-reference
参考: https://learn.microsoft.com/ja-jp/azure/sentinel/security-alert-schema

## Threat Indicator（IOC）の基本と分類

Threat Intelligence（脅威インテリジェンス）は3つのレベルに分類されます。

| レベル      | 内容                                      | 例                                |
|-------------|-------------------------------------------|-----------------------------------|
| Strategic   | 経営レベルの意思決定に関わる情報          | 国家攻撃、全体的な脅威傾向など    |
| Operational | 攻撃者の目的や手法、ツールなど            | 攻撃グループの戦術やTTP           |
| Tactical    | 技術的な指標。直接検知・防御に活用される  | IPアドレス、ドメイン、ハッシュ等  |

Indicator of Compromise（IOC）は Tactical 情報に分類され、以下のようなものが該当します。

- 不審なドメイン名（例: malicious-site.com）  
- C2通信のIPアドレス  
- マルウェアのファイルハッシュ  
- 攻撃に使われたURL

参考: https://learn.microsoft.com/ja-jp/azure/sentinel/understand-threat-intelligence
研修中の開発で印象に残ったことの振り返り

## はじめに
この記事は、新卒研修中に開発実践として作ったコミュニケーションツールが社内の一部で活用されたことを受けて、学びになった部分を振り返り、備忘録として共有する記事です。

## 作ったもの
初対面のコミュニケーションを支援する社内ツールで、自己紹介として名前や職種だけでなく、趣味やフリーコメントを登録しておき、入社者のオンボーディングや開発部内の交流の場でのコミュニケーション時に使えるサービスです。
また、サービスの特徴として、入力された趣味やフリーコメントを使って生成AIがコミュニケーションを促す「話題」を提供してくれる機能を搭載しています。この機能は、初対面同士で会話する際に、「会話のきっかけが作れない」、「趣味はわかるけど、どんなことを聞いて会話を進めれば良いかわからない」といった、会話へのハードルを下げたいという目的で実装が決まりました。

## 開発の進み方
開発はスクラムガイドに則ってスクラムで実施しました。
チーム構成は、開発者（新卒）5名と、スクラムマスターとして先輩社員が1名ついてくださいました。

開発にあたり、作りたい機能の整理はユーザーストーリーマッピングで実施しました。機能の詳細については、今回は割愛しますが、開発する機能の優先度の整理なども行い、MVPの設定も行いました。
![スクリーンショット 2025-03-23 17.36.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3944568/3018d733-3828-4077-9b8d-1370b0c1a1fa.png)

## 特異点
開発期間として設定された期間の約半分が経過した頃のスプリントレビュー・レトロスペクティブの中で、「自分たちが作ったプロダクトを、ユーザが使う理由をもっと考えたい」と意見が出ました。（この意見が出たのは、当初MVPとして設定していたサービスの機能が、「他のサービスや仕組みでも実現できそう」というフィードバックをいただいたことが背景としてあります。）
そこで、スプリントプランニングやリファインメントの場でユーザーストーリーマッピングの見直しやMVPの再設定を行い、よりユーザに価値を提供できるサービスを目指して軌道修正できました。
この取り組みの結果として、サービスの特徴とも言える生成AIを使った話題生成機能の開発が決まり、最終的に新卒研修だけで閉じずに社内で使われるようなサービスになりました。

## 学びになったこと
今回の振り返りの中で個人的に大きかった学び（大切だと実感できたこと）は以下2点で、
- 成果物をもとにフィードバックをもらい、改善すること
- ユーザに価値を届けることを第一に考えること

でした。
フィードバックをもとにしたユーザーストーリーマッピングの見直しやMVPの再設定がなければ、最終的な成果物はまた違ったものになっていたと思いますし、ユーザーに提供できる価値も今より少なかったかもしれません。開発中の改善の取り組みがサービスの価値向上につながると実感できたことは、本当に大きかったと思います。

## まとめ
今回は、新卒研修での開発を通して学びになったことを振り返り、まとめました。今回の学びを忘れずに、日々の業務の中でも活かしていきたいと思います！

## 参考文献
1. [スクラムガイド](https://scrumguides.org/docs/scrumguide/v2020/2020-Scrum-Guide-Japanese.pdf)
1. [ユーザーストーリーマッピング](https://www.agile-studio.jp/post/apm-user-story-mapping)
Microsoft Defender for Endpointのわかりにくい用語まとめ

Microsoft Defender for Endpoint（MDE）には、多機能で便利な一方、実際のセキュリティ運用フェーズにおける役割がわかりづらい機能名もあります。

この記事では、**防御 → 検知 → 対応 → 可視化** というアラート発生の流れに沿って、MDEの用語を整理します。

---

## Threat Protection：リアルタイムに脅威を検出・ブロックする

**フェーズ：防御・検知（多層防御の中核）**

### 概要  
Threat Protectionは、既知・未知のマルウェア、悪意のあるスクリプト、Exploit、ネットワーク攻撃などをリアルタイムで検出・防御する機能群です。

### ユースケース  
- マクロやスクリプト型攻撃のブロック  
- 標的型攻撃やゼロデイ攻撃のリアルタイム検知  
- 攻撃の進行を阻止し、被害の拡大を防止

### 具体例  
悪意のあるOfficeファイルがPowerShellを起動しようとした際、MDEがそれをリアルタイムで検知してブロック。関連するプロセスも自動で停止する。

📘 [Microsoft Docs - Threat protection overview](https://learn.microsoft.com/en-us/microsoft-365/security/defender-endpoint/threat-protection)

---

## Indicator：攻撃の兆候をもとに検知・制御を行う

**フェーズ：検知・制御（プロアクティブな防御）**

### 概要  
Indicatorは、ファイルハッシュ、IPアドレス、URL、証明書などのIoC（Indicator of Compromise）を登録し、MDEがそれに基づいて脅威を検知・ブロックする拡張機能です。

### ユースケース  
- マルウェアのハッシュ値を登録し、該当ファイルを自動ブロック  
- 攻撃に使われたIPやURLを通信制御対象に追加  
- 盗用・悪用された証明書を使用するプロセスを遮断

### 具体例  
SHA-256のハッシュをindicatorに登録し、そのファイルが実行された場合に自動でブロックとユーザー通知を行う。

📘 [Microsoft Docs - Create indicators in Microsoft 365 Defender](https://learn.microsoft.com/en-us/microsoft-365/security/defender-endpoint/indicators-overview)

---

## Alert Notification Rule：アラート発生後の自動通知を実現する

**フェーズ：対応（初動対応・通知の自動化）**

### 概要  
Alert Notification Ruleは、MDE上で発生したアラートに対して、条件に応じて関係者へメール通知を送るための自動化設定です。

### ユースケース  
- 高リスクアラートをSOCチームへ即時通知  
- TeamsやSIEMとの連携によるリアクション強化  
- アラートの種類やデバイスグループごとに通知対象を分ける

### 具体例  
重大度が「High」のアラートのみを対象にした通知ルールを設定し、セキュリティチームにメールを自動送信する。

📘 [Microsoft Docs - Manage alert notification rules](https://learn.microsoft.com/en-us/microsoft-365/security/defender/alerts-manage-notifications)

---

## Vulnerable Device Report：端末の脆弱性を可視化・優先順位付けする

**フェーズ：可視化・分析（リスクの把握と対策計画）**

### 概要  
Vulnerable Device Reportでは、組織内のデバイスに存在するソフトウェアやOSの脆弱性を一覧化し、CVE情報や修正優先度などをもとにリスクを可視化します。

### ユースケース  
- パッチ未適用端末の洗い出し  
- 修正すべき脆弱性の影響度と優先順位の確認  
- セキュリティ監査や報告用レポートの作成

### 具体例  
複数の端末で旧バージョンのAdobe Readerが使用されており、CVE-ID、重大度、対応状況を含めたレポートとして可視化される。

📘 [Microsoft Docs - Vulnerability management dashboard](https://learn.microsoft.com/en-us/microsoft-365/security/defender-vulnerability-management/dashboard-overview)

---
Minicondaの環境設定と大気海洋の解析で便利なライブラリ

# 概要
minicondaのインストール方法と大気海洋の解析に必要なライブラリのインストール方法について説明する。

# 環境
- OS: Ubuntu 22.04 LTS (Windows11 WSL2)


# Minicondaのインストール
0. (ipython, jupyter notebookを使用する場合) 必要なパッケージをインストール（これをしないとインストール後、sqlite3ライブラリの呼び出しでエラーとなった）。次の[記事](https://qiita.com/kazetof/items/adeb331c99d408853f07)を参考にした。

    ```
    $ sudo apt update
    $ sudo apt install libsqlite3-dev libbz2-dev libncurses5-dev libgdbm-dev liblzma-dev libssl-dev tcl-dev tk-dev libreadline-dev
    ```

    　
1. 適当なディレクトリにMinicondaのインストール用シェルのダウンロード。2025/3/28時点の最新版は39.1.1-2
    ```
    $ mkdir hoge
    $ cd hoge 
    $ wget https://repo.anaconda.com/miniconda/Miniconda3-py39_25.1.1-2-Linux-x86_64.sh
    ```
    　

2. Minicondaのインストール。常にminicondaを使う場合は、conda initの実行をYesにする。
    ```
    $ bash Miniconda3-py39_25.1.1-2-Linux-x86_64.sh
    ```
    　

3. （常にminicondaを使う場合）~/.bashrcに以下があるか確認。なければ以下を追記。
    ```~/.bashrc
    # >>> conda initialize >>>
    # !! Contents within this block are managed by 'conda init' !!
    __conda_setup="$('/home/usijimay/miniconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
    if [ $? -eq 0 ]; then
        eval "$__conda_setup"
    else
        if [ -f "/home/usijimay/miniconda3/etc/profile.d/conda.sh" ]; then
            . "/home/usijimay/miniconda3/etc/profile.d/conda.sh"
        else
            export PATH="/home/usijimay/miniconda3/bin:$PATH"
        fi
    fi
    unset __conda_setup
    # <<< conda initialize <<<
    ```


# condaの環境設定
- condaでライブラリをインストールする際、defaultでconda-forgeを使用。
     
    ```
    $ conda config --add channels conda-forge
    ```
    (~/.condarcにcondaの設定が記載される。)


# ライブラリのインストール
- 解析に便利なライブラリ
     
    ```
    $ conda install numpy
    $ conda install scipy
    $ conda install pandas
    $ conda install matplotlib
    ```

- 大気海洋の解析に便利なライブラリ
     
    ```
    $ conda install cartopy
    $ conda install eofs
    $ conda install cmocean
    $ conda install netcdf4
    $ conda install pygrib
    # conda install cdo
    # conda install pycdo
    ```

- WRFの解析に便利なライブラリ
    ```
    $ conda install ncl
    $ conda install wrf-python
    ```


参考URL
https://qiita.com/Ihmon/items/11074e1a4c0e397d934f
https://qiita.com/kazetof/items/adeb331c99d408853f07
https://qiita.com/chatrate/items/bc37e3b7b303e834dd1e
【Power Apps】コンテナを利用して画面レイアウトを柔軟に対応しよう

# 概要
Power Appsでは要素を自由に配置できますが
大量のコントロールを追加するとレイアウトが崩れやすくなります。
そこで便利なのが **「コンテナー（Container）」** です。
この記事では、コンテナーの基本的な使い方から実践的なレイアウト設計のコツまでを解説します。

## コンテナーとは？？
コンテナーは複数のコントロールをまとめて管理できるレイアウト用のコンポーネントです。
主な特徴は以下のとおりです。

+ グループ化：関連するコントロールを一つのブロックにまとめられる
+ 自動配置：子要素の配置を自動で調整できる（横並びや縦並び）
+ レスポンシブデザイン対応：画面サイズに応じて自動調整できる

:bulb: **ポイント**
「コンテナー」は従来の「グループ」とは異なり、動的にサイズや配置を調整できます！

## コンテナーの種類
Power Apps には 3種類のコンテナーが用意されています。

+ コンテナー
+ 水平コンテナー
+ 垂直コンテナー

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/f849171b-d461-4529-a081-58db2de7650e.png)

各コンテナーについて簡単に解説を行っていきます！

## コンテナー
コンテナーは `グループ化` に近い役割を果たします。
コンテナー内でコントロールを自由に配置することが可能です。

コンテナー上の 「+」 を押すとコントロールが選択できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/9f281de1-5622-4d74-b988-bba77bd808ee.png)


↓コンテナー内にボタンを配置↓　(背景は色付けしています)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/f0a00c25-6d25-4f6b-a2a2-1e77a7a2fccd.png)

コンテナーを選択した状態でコントロールを追加することで
コンテナー内に配置を行えます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/44d68c2f-f25a-4bf0-8543-4ba358e4813a.png)

↓コンテナー内にテキストラベルを追加配置↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/802b4649-af40-4e2f-b5fa-f8f4da5d883e.png)

コンテナーの **X,Y** の設定を変更するだけでコンテナー内にあるコントロールも
配置を変更することが可能です。


**コンテナーのプロパティ X=0、Y=0 の状態**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/028996a4-00e0-487d-8a31-6b0ce734dce6.png)

**コンテナーのプロパティ X=300、Y=300 の状態**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/abdb6524-018d-492d-9619-fea358671413.png)

このようにコンテナーの配置設定を変更するだけでコンテナー内にある
ボタンとテキストラベルも一緒に動かすことができます。

## 水平コンテナー
水平コンテナーは、子要素（ボタン、ラベル、テキスト入力など）を
自動的に横並びに配置できるコンテナーです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/24337982-79eb-41fc-aa12-6a532412eca2.png)

コンテナー内にアイコンを追加していきました。
最新で追加したものは自動的に一番右に配置されるようになっています。

プロパティで `幅(伸縮可能)` の設定を **オン** にすると
設定を変更することなく親プロパティのサイズに合わせて自動的に幅を変更してくれます。
メニューコントロール等を配置したい時などにとても便利な機能となっています！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/3a1ec52a-0a01-4774-bb01-dfb13265be0d.png)

`高さ` や `パディング` などはその他のコントロールと同様に設定を行ってください。

## 垂直コンテナー
垂直コンテナーは、子要素（ボタン、ラベル、テキスト入力など）を
自動的に縦並びに配置できるコンテナーです。

こちらは上から下に向けて配置されるようになっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/25ed614a-6073-4f07-ab03-7c687cc0b9a0.png)

水平コンテナーの時の同様に親プロパティのサイズに合わせた高さ変更を行いたい場合は
プロパティの `高さ(伸縮可能)` の設定を **オン** にすることで可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/98076de5-1710-48b9-8d50-6c621abb3cf1.png)

### まとめ
コンテナーを上手に活用することでレイアウトの設計が行いやすくなり
レスポンシブな対応も可能になります！
+ コンテナーは自由なレイアウト向け
+ 水平コンテナーは横並び配置のナビゲーションバーなど向け
+ 垂直コンテナーは縦並び配置の入力フォームなど向け

コンテナを適切に使い分けることで
より柔軟で使いやすいアプリを作成することができます！
ぜひ試してみてください:relaxed:
Redis（Valkey）にパスワードがかからない


## 問題
正常にパスワードを設定できていれば、下記のように
Redisクライアントからの接続時にパスワードチェックをしてくれるはずなのだが、してくれない。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283248/c618facc-4ca8-4ce8-b54a-3bcb9b7607e1.png)

## やったこと

よくあるPostgressのパスワード設定だと下記のように環境変数を設定するだけで、同じような設定がValkeyにもあったのでできるだろうと思った。
```
    environment:
      POSTGRES_USER: 'user'
      POSTGRES_PASSWORD: 'postgres'
```

https://github.com/bitnami/containers/blob/main/bitnami/valkey/README.md

Configuration
Customizable environment variables の欄に下記があったので設定したのだが、
全然、有効にならない。
```
VALKEY_PASSWORD
VALKEY_PRIMARY_PASSWORD
```

## 解決

よく見たら、上記のページはBitnamiが出しているものだった。
valkey公式からDockerImageを取得するなら、
下記のようにコマンドを含めたDockerComposeファイルとすることで、
パスワード付きValkey（Redis）の立ち上げに成功した。
```
version: '3'

volumes:
  rbdata:

services:
  valkey:
    image: valkey/valkey:8.0.0
    ports:
      - "6379:6379"
    environment:
      - VALKEY_PASSWORD=xxxxxxxx
    command: >-
      bash -c "valkey-server --requirepass $$VALKEY_PASSWORD"
```

また、BitnamiにてラッピングされたValkeyを使うのであれば、
下記のDockerComposeファイルで
パスワード付きValkey（Redis）の立ち上げに成功した。
ただし、パスワードに＠マークを含められないなど細かな制限が増える模様。

```
version: '3'

volumes:
  rbdata:

services:
  valkey:
    image: bitnami/valkey:8.0.0
    ports:
      - "6379:6379"
    environment:
      - VALKEY_PASSWORD=xxxxxxxx
```

Bitnamiは20年くらい運用されている歴史あるサービスなので依存してしまってもいいかな。
【Azure Bot Service】Operation returned an invalid status code 'Unauthorized'

## はじめに
起きていたエラー：

:::note alert
Operation returned an invalid status code 'Unauthorized'
:::

Azure Bot Service で Web Chat や Direct Line といった **Bot Framework の標準チャンネル**を利用したい場合、**Azure AD アプリ登録をマルチテナントにする必要があるかもしれません。**

この記事では、その理由と、実際に **マルチテナント構成でBotリソースを作成・再構築する手順**を解説します。


## シングルテナントでは標準チャンネルが使えない？

Azure AD アプリ登録を「**シングルテナント**」にしてしまうと、BotFrameworkの **Web Chat / Direct Line などの標準チャンネルでは認証連携ができなくなります**。  
このため、Bot Service 側で正常な通信ができず、401エラーが出たり、Web Chatが使えないなどの問題が起きます。

### 解決策は？

- **マルチテナント（Multi-tenant）アプリとして再登録**
- **Bot リソースとの紐付けを再設定**
- 必要に応じて、Botアプリ側の設定やデプロイ環境を更新


## 手順：マルチテナント構成でBotを再構築する

以下の手順に従えば、Bot Framework の標準チャンネルを活用できる構成を、一から作り直すことができます。


### 1. Azure AD アプリを新規作成（マルチテナント）

1. Azure Portal → **Azure Active Directory** → **App registrations** → [New registration]
2. Name: `chatbot-qiita`（任意の名前）
3. **Supported account types**:  
   `Accounts in any organizational directory and personal Microsoft accounts` を選択（マルチテナント）
4. Redirect URI: 空でもOK（後で不要）
5. [Register] をクリック

#### Client Secret を作成

- [Certificates & secrets] タブ → [New client secret]
- Description: `bot-secret`（任意）
- Expires: 任意期間（24か月など）
- 作成後、**Value** をメモ（これが `MicrosoftAppPassword`）

#### 確認しておく値

| 項目 | 説明 |
|------|------|
| App (client) ID | `MicrosoftAppId` に相当 |
| Client Secret | `MicrosoftAppPassword` |
| signInAudience | `AzureADandPersonalMicrosoftAccount` であることを確認 |

---

### 2. Bot リソースを新規作成

1. Azure Portal → [Create a resource] → **Bot Channels Registration** または **Azure Bot**
2. Bot Handle: `chatbot-qiita`（任意）
3. Subscription / Resource Group / Location を指定
4. 「既存の App ID / Password を使用する」を選択  
   - 作成した `MicrosoftAppId` / `MicrosoftAppPassword` を入力
5. [Create] で作成

#### 作成後の確認

- OverviewやSettingsタブで App ID が正しいか確認
- Channels タブで Web Chat / Direct Line / Teams などを有効化

---

### 3. Bot アプリケーション側の設定を更新

1. `.env`や環境変数に以下を設定：

   ```env
   MicrosoftAppId=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
   MicrosoftAppPassword=xxxxxxxxxxxxxxxxxxxxxxxxxxxx
   ```

2. Azure Web App などにデプロイしている場合：
   - Azure ポータルの **App Service → Configuration → Application settings** から設定

---

### 4. Web Chat でテスト

1. Azure Portal → Bot リソース → [Test in Web Chat]
2. Botと通信できるかテスト  
   - 返信があればOK
   - エラー（401など）が出なければ成功



## シングルテナントで使いたい場合は？

どうしてもシングルテナントで運用したい場合は、**Bot Framework の標準チャンネルを使用しない構成**にする必要があります。  
たとえば：

- 自作のチャットUI（React / Vue など）+ REST API通信でBotに接続
- BotFramework SDKで `/api/messages` に直接リクエストを送る構成



## おわりに

BotFramework の標準チャンネルを利用する場合、**マルチテナントでのアプリ登録が前提**になります。  
既存リソースの設定変更が難しい場合でも、新しくリソースを作り直すことでスムーズに再構築できます。

**「自社テナントのみに制限したい」場合も、マルチテナント + AADグループ制御などでカバー可能**なので、要件に応じて最適な構成を選んでください。
【用語解説】マップ？スライス？

### webに関する技術書を読んでいる中でわからない単語が・・・
**スライス**：動的なデータ構造、固定長の配列とは違う。要はリストって呼ばれているもの。

**マップ**：キーバリュー型のデータ構。造要は辞書とか連想配列って呼ばれているもの。

:::note info
ただの言い方の違いだっただけ。こんな言い方あんまりしないと思う。
:::
実務未経験からスタートアップの開発業務に参画して学んだことをまとめました！

こんにちは！
2025年1月からLINE上で簡単にECサイト構築・運営が可能なシステム開発のプロジェクトに参画しています。実際のチーム開発を経験したことで、自分自身の大きな成長を感じています。今回はこのプロジェクトを通して学んだことをまとめました！
まずはプロジェクト概要から
# プロジェクト概要
#### 【開発体制・稼働内容】
- チームメンバー５名による開発体制
- 土日フルリモート勤務
- 稼働時間は月40時間前後（自分は業務についていくために80時間ほど費やしていました）

#### 【使用技術】

- フロントエンド：Typescript Next.js/React
- バックエンド：Go 
- インフラ：AWS
- エディタ：Cursor 「Claude3.7 Sonnet」
- Docker Composeによるローカル環境整備
- タスク管理（ClickUp）やコミュニケーション（Slack）での連携

# 担当した業務内容
|時期|業務内容|
|-|-|
|2025年1月|・環境構築<br>・プロジェクトのキャッチアップ<br>・フロントエンド作成|
|2025年2月|・フロントエンド作成<br>・リファクタリング<br>・エラー解決|
|2025年3月|・仮登録～本登録機能の作成

# 学んだ技術まとめ
### Git
自社ではSVNを使っていたので、Gitは初めてでした。
このプロジェクトを通してコミット、プッシュ、プルなどの基本的な操作はCLIでできるようになりました。
また、以下の本を読みgitの体系的な技術を学びました。
#### わかばちゃんと学ぶ Git使い方入門
![スクリーンショット 2025-03-16 151909.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836145/5fd77473-6241-4c7f-a81e-64b350cc5720.png)

### Github 
プルリクエストやキー取得など基本的な操作ができるようになりました。

### Typescript、React、Next.js
上記の技術は触るのが初めてだったので、キャッチアップに苦労しました。
キャッチアップ方法としては初心者用の動画講座をいくつか視聴し、自分が担当しているコードを作業時間外に動かして理解していました。
平日に２～３時間ほど行っていたので、2～3週間ほどで言語がスラスラ読めるようになりました。

#### 【JavaScript超入門講座】わずか50分で知識ゼロから基礎をマスター！


![スクリーンショット 2025-04-03 093746.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836145/38d7ca37-aa32-4a9f-9466-047dec5b0262.png)
https://www.youtube.com/watch?v=QCjFPSO96RU

#### 世界一わかりやすいTypeScript講座！プログラミング初心者もOK
![スクリーンショット 2025-04-03 093803.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836145/cf5419a4-bc1e-421b-979c-54ce83d4185f.png)
https://www.youtube.com/watch?v=GEMtGlBiua4&t=3599s

#### 【Next jsで学ぶReact講座 #1～17】
![スクリーンショット 2025-04-03 093842.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836145/77e6e56d-94ef-47dc-adbc-627527646708.png)
https://www.youtube.com/watch?v=15WLMqnkPsE&list=PLwM1-TnN_NN6fUhOoZyU4iZiwhLyISopO

### Docker
基本的なDockerのCLIでの操作ができるようになりました。
また、Dockerを立ち上げなおすときのタイミングも学びました（エラーが起きたとき、設定を変更したときなど）


### エラー解決能力
コメントアウトを活用してエラー箇所を特定する方法や、AIを利用したエラー解決手法を学び、実践しました。

### AI開発能力

AI開発能力については以下のことを学びました
・Cursorの基本的な使い方
・細かくタスクを分解してAIで作成
・AIで作成するたびに細かくテストする。
など
【Rails】mysql2 gemがインストールできない原因と解決までの道のり【環境構築トラブルシュート】

## 背景
Devin環境でRailsアプリのセットアップを行っていた際、`bundle install` を実行したところ `mysql2` gem のインストールが失敗し、原因特定と解決までに非常に時間がかかりました。

同じような環境で詰まっている方の参考になればと思い、原因と解決までの道のりをまとめます。


## mysql2とは
`mysql2` は **Ruby (Rails) と MySQLデータベースを接続するためのgem** です。

Railsの `config/database.yml` で `adapter: mysql2` を指定している場合、MySQLに接続するために `mysql2` gem が必須になります。
ただし、**MySQLの公式Cライブラリ (libmysqlclient) に依存しており、インストール時にC拡張のビルドが必要** なため、環境によってはセットアップ時にエラーが発生しやすいです。

## 環境
- OS: Ubuntu (Devin環境)
- Ruby: 3.2.1
- Bundlerで `mysql2 0.5.6` をインストールしようとした


## 発生したエラー
`bundle install` 実行時に以下のエラーが発生。

```bash
An error occurred while installing mysql2 (0.5.6), and Bundler cannot continue.
```

詳細なログでは `mkmf.rb` 内で `NoMethodError` が発生していました。

```bash
mkmf.rb:1083:in `block in find_library': undefined method `split' for nil:NilClass (NoMethodError)
```

## 試したこと

### opensslの設定
最初は、openssl関連のエラーかと思い、Homebrewでインストールした `openssl@3` のパスを環境変数に設定しました。

```bash
export LDFLAGS="-L/home/linuxbrew/.linuxbrew/opt/openssl@3/lib"
export CPPFLAGS="-I/home/linuxbrew/.linuxbrew/opt/openssl@3/include"
export PKG_CONFIG_PATH="/home/linuxbrew/.linuxbrew/opt/openssl@3/lib/pkgconfig"

bundle config build.mysql2 --with-ldflags="${LDFLAGS}" --with-cppflags="${CPPFLAGS}" --with-opt-dir="/home/linuxbrew/.linuxbrew/opt/openssl@3"
```

しかし、エラーは解消せず。


### MySQL本体 (brew install mysql) のインストール
MySQL本体が必要かと思い、HomebrewでMySQLをインストール。

```bash
brew install mysql
```

しかし、**mysql2 gem のビルド失敗には影響しませんでした。**

## 原因
最終的な原因は、**MySQLの開発用パッケージ (libmysqlclient-dev) がインストールされていないこと** でした。

mysql2 gem をインストールするには、MySQLが提供しているC言語のライブラリ（libmysqlclient）と、その設計図であるヘッダファイル（mysql.h）が必要です。
※ プログラムがビルド時に必要とする設計図ファイル

Devin環境（Ubuntu系）では、このライブラリとヘッダは aptパッケージ (libmysqlclient-dev) として提供されており、これをインストールしないと mysql2 gem を正しくビルドできません。

HomebrewでMySQL本体をインストールしていても、**ビルド時には参照されない** ため、インストールに失敗していました。

## 解決方法
以下のコマンドで必要なパッケージをインストールし、`bundle install` したところ正常にインストールが完了しました。

```bash
sudo apt update
sudo apt install -y libmysqlclient-dev build-essential
bundle install
```

これにより **MySQL公式Cライブラリとビルドツールがインストール** され、`mysql2` gem が正常にビルド・インストールされました。

## まとめ

| 試したこと                       | 効果 | 理由                                                   |
|------------------------------|:----:|----------------------------------------------------|
| opensslのパス設定               | ❌   | opensslはmysql2 gemの必須依存ではなかった           |
| brew install mysql           | ❌   | Devin(Ubuntu)環境ではHomebrewのMySQLは無関係        |
| libmysqlclient-devのインストール | ✅   | **mysql2 gemのC拡張ビルドに必須**                    |


## 最後に
今回のトラブルシュートを通じて、**mysql2 gem のインストールにはMySQLの開発パッケージが必須** であることを再確認しました。

環境構築で詰まっている方は、まず **libmysqlclient-dev の存在** を確認してみてください。
私自身、ここで多くの時間を使ってしまったので、この記事が同じ悩みを持つ方の助けになれば幸いです。
【用語解説】サブドメインってなんだー？

### サブドメイン
・既存のドメイン名の前に特定の文字列を追加して新しいドメインとして作る手法。

### 例えば
`example.com`を`blog.example.com`や`shop.example.com`のように設定出来る。
→こうすることで異なるコンテンツやサービスを提供することが可能になる。

### メリット
・コスト削減
・ブランド統一
・SEO効果

### デメリット
・メインドメインからの影響：メインドメインが何らかのペナルティを受けた場合、サブドメインも影響を受ける可能性がある。（これはサイトによりけり）

:::note info
SSL証明書の追加費用：サブドメインごとにSSL証明書を取得する必要がある。
:::
一般ユーザーでHULFT for Windowsを運用する時、管理情報・履歴ファイルの扱いについて

システム管理者ではなく、一般ユーザーでHULFT8 for Windows、HULFT10 for Windowsを運用するときに、インストールやサービスの起動・停止は通常できませんが、転送の設定と履歴の確認はできます。
管理情報や履歴ファイルを正常にアクセス状態でなければ、管理情報を変更、履歴を確認するときに不正アクセスが発生してしまい、操作できなくなる場合があるので、HULFTはどうのようにファイルアクセス権限を設定していたか、そして注意する必要なことはありますか。

## Windows上ファイル権限の継承ルール

一般ユーザーはUsersグループのユーザーを指しています、Usersグループに個別権限を設定する場合は下記動作になります。

- 設定した権限は下記のように黒いチェックする状態です：
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3965359/cac1d967-2855-44a2-84c1-b1bb347d36b7.png)

- ファイルに権限を設定していない場合、ファイルが所属するフォルダーの権限を継承する。　
    - 同様にフォルダーに権限を設定していない場合、フォルダーが所属するフォルダーの権限を継承する。　

- ファイルに所属するフォルダーと同じ権限を設定した場合、黒いチェックではなく灰色チェックで表示されます。ですがOS内部では個別に設定されていることがわかるので、フォルダーの権限を変更したら、ファイルの権限が黒いチェックで表示されるようになります。　
- ファイルをコピーする場合、個別設定した権限はコピーされません。　

## HULFTのファイル権限設定

Usersグループに個別権限（変更・書き込み）を設定すれば、一般ユーザーでも自由にアクセスすることはできますので、実際HULFTのフォルダーを確認したら、まさしくこの方法で実現しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3965359/f71f3ab3-fd14-4eff-8836-aad703586123.png)

さらに、いくつか実験して、下記対応がされていることがわかります：

- 管理情報や、履歴ファイルを格納しているETCフォルダーごと、Usersグループに変更・書き込み権限を付与しています。　
- 新しく作成する管理情報・履歴ファイルに対して、Usersグループに変更・書き込み権限を付与しています。（ETCフォルダの権限を変更した場合確認できます）
- 旧バージョンからデータをコンバートした場合、ファイルの権限は継承できます。（一般ユーザーでの運用を止めたい場合ファイル権限を**手動で調整可能**という意図）
【Unity】Unity Hub に Personal License を追加・認証できない問題の解決方法

# はじめに
新調したMacに、最新のUnity Hub(記事投稿時点は、3.11.1が最新)をインストールしてUnityを利用しようとしました。しかし、ログインしたアカウントのPersonal Licenseを適用することが出来ず、Unityを利用することが出来ませんでした。

[公式Support](https://support.unity.com/hc/ja/articles/211438683-%E3%83%A9%E3%82%A4%E3%82%BB%E3%83%B3%E3%82%B9%E3%82%92%E3%82%A2%E3%82%AF%E3%83%86%E3%82%A3%E3%83%99%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%E3%81%A9%E3%81%86%E3%81%99%E3%82%8C%E3%81%B0%E3%81%84%E3%81%84%E3%81%A7%E3%81%99%E3%81%8B) に記載されている方法などを試しましたが、最終的に「**古いバージョンのUnityHubでLicenseを適用してから、最新のUnityHubに更新する**」方法で解決できました。

同じ問題に出くわしている方は、ぜひ今回の解決方法を試してみてください。

# 対象読者
- 3.0 バージョン の Unity Hub に Personal License を追加出来ないことに困っている方

# 環境
- MacBook Pro M3
- Unity Hub 2.3.2 & 3.11.1 バージョン

# 解決したい問題
![ライセンスを適用できないUnity Hub.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3786602/b2656602-a0c2-4f42-9a8e-8870e27741ee.png)
ダウンロード・インストールした最新のUnity Hub(3.11.1)に、Presonal License のアカウントでサインインすると、``No active licenses`` と警告文が上部に表示されていました。

![スクリーンショット 2025-03-31 10.54.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3786602/3d0d48a7-d683-4a0c-be0e-b1136298d062.png)

そのため、License を追加するために、``Preferences < Licenses < Add`` から追加することを試みます。しかし、ここから何度やっても追加することが出来ないので、下記の手順を踏んで解決します。

# 解決手順
1. 既存のUnity Hubをアンインストール
2. 古いバージョン(2.3.2)のUnity Hubをダウンロードしてインストール
3. 古いバージョン(2.3.2)のUnity Hubで、ライセンスを有効・適用させる
4. 最新バージョンのUnity Hub に置き換える

## 1. 既存のUnity Hubをアンインストール
Macであれば、Finder < アプリケーション < Unity Hub をゴミ箱に入れるでアンインストールします。

## 2. 古いバージョン(2.3.2)のUnity Hubをダウンロードしてインストール
公式では、最新のUnity Hubを利用する方針です。なので、有志の方(wayback machine)がアーカイブしている古いバージョン[2.3.2 ver Unity Hub](https://web.archive.org/web/20200814043030/https://public-cdn.cloud.unity3d.com/hub/prod/UnityHubSetup.dmg)のものをダウンロードします。ページ内の``GO``ボタンからダウンロードして下さい。問題がなければインストールします。

## 3. 古いバージョン(2.3.2)のUnity Hubで、ライセンスを有効・適用させる
パーソナルライセンスを保持するUnityアカウントでサインインするだけで、勝手に適用されます。![ライセンス適用.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3786602/5c9c50f1-f47a-4a6a-9cf7-0ae7ba8c891c.png)

## 4.  最新バージョンのUnity Hubに置き換える
[最新バージョン](https://unity.com/ja/download)をダウンロード・インストールして、古いバージョンのものと置き換えます。

![最新バージョンに適用された.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3786602/6eaba129-89c7-42be-ab10-7f00d17ee1c6.png)

ライセンスを確認すると、最新のバージョンでも、正しく Personal License が適用されていることが確認出来るはずです。

## まとめ
今回のUnityのライセンス認証に関する問題を解決するために、何時間も費やしてしまいしました...。Unityに初めて触れる方が、このような問題に出くわして挫折するのは非常に勿体無いので、今回の記事を参考に解決できたら幸いです。楽しいUnity開発をはじめましょう！


# 参考文献
- [Unity Discussions 参考スレッド](https://discussions.unity.com/t/still-unable-to-activate-a-personal-license-ive-tried-everything/869732/5)
- [公式 Unity Hub ダウンロードページ](https://unity.com/ja/download)
- [wayback machine Unity Hub 2.3.2](https://web.archive.org/web/20200814043030/https://public-cdn.cloud.unity3d.com/hub/prod/UnityHubSetup.dmg)
サーバOSの種類

## はじめに
　普段使っているパソコンとサーバマシンとは、さほど大きな違いはない。
　サーバは、その役割から、熱に強い構成であったり、グラフィカルな機能を使うことが少ないなど、サーバ専用に特化する傾向はあるが、物理的なマシンがあって、そこにOSがあり、ソフトウェアを入れるという点では同じである。個人が使うパソコンとサーバとは、役割の違いに過ぎない。
　なので、今使っているパソコンをサーバにすることだって出来る。サーバ機能はソフトウェアによって提供されるので、そのソフトウェアを入れれば良いだけである。
　ただ、サーバの役割の性質から、OSは、サーバ用のOSを使うことが多い。
　また、サーバ用OSは、LinuxかUnix系が採用されることが多く、サーバ用ソフトウェアもLinux用ソフトウェアが多数である。Windowsにも、サーバ用のバージョンがあるが、シェアとして大きいのはLinuxとUNIXである。
　LinuxやUNIXには種類があり、Linux系で有名なものにRed HatやCentOS、Ubuntuなどがある。

## サーバOSの種類
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387980/b755921f-e185-4a90-96b5-0ae130b760aa.png)

## おわりに
ここまで読んでいただきありがとうございます！

## 参考文献
・仕組みと使い方がわかる Docker&Kubernetesのきほんのきほん 単行本（ソフトカバー） – 2021/2/1
小笠原種高 (著)
p.13-14