OmniAICreator/Qiita-1.07M huggingface dataset:
APIについて調べてみた

## はじめに
こんにちは！SIerに入社して１年目の新人エンジニアです。日々の業務で当たり前のように使われている用語で「えっ、それって何？」と思ったものを調べて、自分なりにまとめていきます。

今回は「API」について調べてみました。

## 目次
- [APIって何の略？](#apiって何の略)
- [APIの基本概念](#apiの基本概念)
- [APIをレストランに例えると](#apiをレストランに例えると)
- [APIの種類](#apiの種類)
  - [Web API](#web-api)
  - [ライブラリAPI／ランタイムAPI](#ライブラリapi)
  - [ネイティブAPI](#os-api)
- [APIの実際の利用例](#apiの実際の利用例)
- [APIを使う利点](#apiを使う利点)
- [まとめ](#まとめ)
- [参考資料](#参考資料)

## APIって何の略？
まず、「API」は「**Application Programming Interface**」の略です。日本語では「アプリケーション・プログラミング・インターフェース」となります。

## APIの基本概念
APIは**ソフトウェア同士がデータのやりとりするための窓口のようなもの**です。簡単に言うと、異なるシステムやプログラム同士が「会話」するための共通言語や仕組みを提供するものです。

APIがあることで、私たちプログラマは相手のシステムの内部構造を知らなくても、決められた方法で機能を利用できます。例えば、Googleマップの地図をアプリに表示したい場合、Googleマップの内部がどうなっているか知らなくても、GoogleマップのAPIを使えば簡単に実現できるんです。

## APIをレストランに例えると
APIの概念を説明する時によく使われる例えが「レストラン」です。

![APIをレストランに例えた図](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3903215/a69d621f-f094-4864-9b67-458b6105da31.jpeg)


- **客（クライアント）**: システムを利用したい側
- **ウェイター（API）**: 注文（リクエスト）を受け取り、厨房に伝え、料理（レスポンス）を客に届ける役割
- **料理人（サーバー）**: 実際に処理を行い、結果を返す側

客は「ハンバーグを1つください」と注文（リクエスト）し、ウェイターはそれを厨房に伝えます。料理人がハンバーグを作り、ウェイターを通じて客に届けられます（レスポンス）。

ここで重要なのは、客は料理人が具体的にどうやってハンバーグを作るのか（内部処理）を知る必要がないということ。メニュー（API仕様）さえ分かれば、注文して料理を味わうことが出来ます。

## APIの種類
APIには大きく分けて3つのタイプがあります

### Web API
インターネットを通じて異なるシステム間でデータをやり取りするAPI。HTTPリクエストを使用してサーバーと通信します。

### ライブラリAPI／ランタイムAPI
プログラミング言語のライブラリやフレームワークが提供する機能を使うためのインターフェース。

例えば
- Javaの標準ライブラリAPI
- ReactやVue.jsといったJavaScriptフレームワークのAPI

### ネイティブAPI
オペレーティングシステムが提供する機能を利用するためのインターフェース。

## APIの実際の利用例

1. **SNSログイン**: 「Facebookでログイン」ボタンは、FacebookのAPIを使って認証情報を取得
2. **天気予報アプリ**: 気象データを提供するAPIからデータを取得して表示
3. **決済システム**: クレジットカード処理をPayPalやStripeなどのAPIに任せる
4. **地図サービス**: GoogleマップのAPIを使って地図を表示

ビジネスシステムでも、在庫管理システムと会計システムの連携、顧客情報の共有などにAPIが使われています。

## APIを使う利点

1. **開発の効率化**: APIを利用することで、自社で一から機能を開発する必要がなくなり、開発時間とコストを大幅に削減できる
2. **セキュリティレベルの向上**: GoogleやFacebookなどの認証APIを利用すれば、高度なセキュリティを比較的容易に実現できる
3. **データの二次利用**: API提供側が持つ膨大なデータを自社サービスで活用できる


## まとめ
「API」という用語、最初は単なる技術用語の一つだと思っていましたが、調べてみるとシステム間の連携を実現する重要な概念であり、現代のソフトウェア開発の基盤となっていることが分かりました。レストランの例えで考えると、APIはウェイターのようにクライアントとサーバーの間で情報をやり取りする重要な役割を担っています。


## 参考資料
https://kwcplus.kddi-web.com/blog/api-types-and-protocols

https://www.e-sales.jp/eigyo-labo/api-16192
シスコ 100-890 試験に合格するための確かな勉強戦略

Cisco 100-890試験のすべて：知っておくべきこと
Cisco 100-890試験は、「Supporting Cisco Collaboration Devices（シスココラボレーションデバイスのサポート）」としても知られ、コラボレーション分野でCisco Certified Technician（CCT）を目指すプロフェッショナルにとって重要な認定試験です。ITキャリアを向上させたいと考えているなら、この試験に合格することは必須です。しかし、正直に言って、この試験は簡単ではありません。一発で合格したいなら、適切な学習戦略と教材が必要です。

Cisco 100-890試験とは？

Cisco 100-890試験は、Ciscoのコラボレーションデバイスをサポートするための知識とスキルをテストするものです。Ciscoのネットワークおよびコラボレーション機器の診断、修理、メンテナンス能力を検証します。
試験の主な内容は以下の通りです：
•	Ciscoコラボレーションエンドポイント – ビデオや音声コラボレーションデバイスの理解とトラブルシューティング。
•	Ciscoネットワーキングの基礎 – IPアドレスやサブネットなど、ネットワーキングの基本知識。
•	Cisco Webexとユニファイドコミュニケーション – Cisco Webexエンドポイントとユニファイドコミュニケーションソリューションの管理と設定。
•	トラブルシューティング技術 – Ciscoコラボレーションデバイスの問題診断とハードウェア関連の不具合の解決。
試験は多肢選択式やドラッグ＆ドロップ形式の問題で構成され、試験時間は90分です。合格するためには、これらのトピックに対する深い理解と、Ciscoコラボレーションハードウェアを扱う実践的な経験が必要です。
Cisco 100-890試験の準備方法
この試験に合格するためには、継続的な努力、戦略的な計画、そして質の高い学習リソースへのアクセスが不可欠です。
以下に、試験に備えるためのステップバイステップのアプローチを紹介します。

1.	試験の目的を理解する
学習教材に取り組む前に、Ciscoの公式試験ブループリントを徹底的に確認しましょう。各トピックを理解し、すべての重要な分野をカバーする学習計画を立ててください。
2.	信頼できる学習教材を使用する
すべての学習ガイドが同じ品質ではありません。Ciscoの公式リソースを使用することをお勧めします。例えば：
o	Cisco Learning Network – Ciscoが提供する無料および有料の学習リソース。
o	公式Cisco Press書籍 – これらの書籍は試験の目的を詳細にカバーしています。
o	Ciscoラボと模擬試験 – トラブルシューティングや実践的なシナリオを理解するために、実践的な練習が重要です。
3.	実際の試験問題で練習する
最も効果的な準備方法の一つは、実際の試験問題を使って練習することです。KillerDumpsは、過去7年間にわたり高品質のCisco 100-890試験ダンプや学習教材を提供してきました。彼らの模擬試験は実際の試験を反映して設計されており、問題形式や難易度に慣れるのに役立ちます。
4.	オンラインフォーラムや勉強グループに参加する
Cisco 100-890試験の準備をしている他の受験者と交流しましょう。RedditやCiscoフォーラム、LinkedInグループなどのオンラインコミュニティは、勉強のヒントを交換したり、疑問を解消したり、追加のリソースにアクセスするのに最適なプラットフォームです。
5.	時間制限付きの模擬試験を受ける
実際の試験環境をシミュレートするために、時間制限付きの模擬試験を受けることで、時間管理能力を高め、自信をつけることができます。間違えた問題を分析し、弱点を克服するように努めましょう。
6.	一貫性を持ち、学習計画に従う
試験直前に詰め込むような勉強法では合格できません。毎日決まった時間を勉強に充て、定期的にノートを復習し、トピックを繰り返し確認しましょう。

最高のCisco 100-890試験準備教材はどこで見つけるか？

適切な学習教材は、試験の合否を分ける鍵となります。オンラインには無数のリソースがありますが、信頼性が高く最新のコンテンツを見つけることが重要です。信頼できる試験ダンプや模擬試験を探しているなら、KillerDumpsがおすすめです。彼らの学習教材は専門家によって作成され、最新の試験トレンドに合わせて定期的に更新されています。

Visit the website and 55% Discount:https://www.killerdumps.com/cisco-exams

模擬試験に加えて、以下のリソースも検討してください：
•	Cisco公式トレーニングコース
•	UdemyやPluralsightなどの信頼できるソースからのビデオチュートリアル
•	実践的なラボ演習


最後に：今すぐ行動を起こそう！

Cisco 100-890試験は、Cisco Certified Technician in Collaborationになるための第一歩です。成功を偶然に任せてはいけません。最高のリソースで準備し、実際の試験問題で練習し、学習計画にコミットしましょう。適切な戦略と準備があれば、一発で試験に合格し、ITキャリアを新たな高みに導くことができます。
今日から始めて、認定取得の夢を現実にしましょう！
Dedicated Hostのインスタンスタイプを変更する方法

# 前提
複数のインスタンスタイプサポートしない、インスタンスファミリーが対象です。複数のインスタンスタイプをサポートするインスタンスファミリーは下記URL参照です。ただし、現時点で比較的新しめのm7i等はサポートしているにも関わらず記載がないので、コンソール画面で確認するのが確実です。

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/dedicated-hosts-limits.html

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2986198/87f6ecf8-805f-4d6d-b01c-a712acbdb262.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2986198/5af0dcf1-05e6-4153-96ac-f29951161a01.png)

上記の通り、複数のインスタンスタイプをサポートしていないインスタンスファミリーを選択すると、DedicatedHosts（以下DH）構築時点でどのインスタンスタイプを利用するか選択する必要があります。

# 変更手順
※AWSサポートの方に伺いました。いつも本当にありがとうございます。

確認した限り、コンソールからの変更は不可なので、CloudShellからAWS CLIを使います。

https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/modify-hosts.html

```
$ aws ec2 modify-hosts --instance-type m6id.4xlarge --host-ids h-xxxxxxxxxxxxxxxxx

# 実行結果
{
"Successful": [
"h-xxxxxxxxxxxxxxxxx"
],
"Unsuccessful": []
}
~~~
```

# 終わりに
今回は短いですが以上です。DH上のEC2のスペックを急遽上げる必要がでて焦りましたが、新規でDHを立てる必要はなく、上記の通り簡単に既存DHにたいｓ変更が可能です。
RAGについて調べてみた

## はじめに
こんにちは！SIerに入社して１年目の新人エンジニアです。日々の業務で当たり前のように使われている用語で「えっ、それって何？」と思ったものを調べて、自分なりにまとめていきます。

今回は「RAG」について。

## 目次
- [RAGって何の略？](#ragって何の略)
- [なぜRAGが必要なの？](#なぜragが必要なの)
- [RAGの仕組み](#ragの仕組み)
- [RAGの構成要素](#ragの構成要素)
- [RAGのメリット](#ragのメリット)
- [まとめ](#まとめ)
- [参考資料](#参考資料)

## RAGって何の略？
**RAG**は「**Retrieval-Augmented Generation**」の略で、日本語では「**検索拡張生成**」と訳されています。

簡単に言うと、RAGは**大規模言語モデル（LLM）に外部の知識を検索して取り込ませる技術**です。ChatGPTのような生成AIが自分の「記憶」だけでなく、外部データベースや資料から情報を引っ張ってきて、より正確で最新の回答を生成できるようにする方法なんです。

## なぜRAGが必要なの？
生成AIモデル（LLM）にはいくつかの問題点があります。

1. **知識の鮮度**: LLMは学習時点の情報しか持っていない
3. **ハルシネーション**: 自信満々に間違った情報を生成することがある
4. **専門知識**: 企業固有の情報や非公開情報は学習していない

これらの問題を解決するために、RAGでは外部の最新データや専門情報をその場で検索して活用します。例えば、社内文書や製品マニュアルなど、公開されていない情報をAIに「参照」させることができるんです！

## RAGの仕組み

1. **ユーザークエリ受信**: ユーザーが質問を入力
2. **関連情報検索**: 質問に関連する情報を外部ソースから検索
3. **コンテキスト組み込み**: 検索結果を「コンテキスト」として質問に追加
4. **AI回答生成**: コンテキスト付きの質問にLLMが回答を生成

つまり、AIが回答を生成する前に「ちょっと調べもの」をする機能を追加したようなものですね！

**従来の生成AI**:
```
ユーザー質問 → LLM → 回答（モデルの知識のみに基づく）
```

**RAGを使った生成AI**:
```
ユーザー質問 → 情報検索 → 検索結果をコンテキストとして追加 → LLM → 回答（モデルの知識+検索結果に基づく）
```

## RAGの構成要素

1. **データソース**: 検索対象となる文書やデータベース（社内文書、マニュアル、Webサイトなど）
2. **埋め込みモデル（Embedding Model）**: テキストをベクトル（数値の配列）に変換するモデル
3. **ベクトルデータベース**: 埋め込みベクトルを効率的に保存・検索するデータベース（Chroma、Weaviateなど）
4. **ベクトル検索エンジン**: ユーザークエリに関連するドキュメントを見つけるシステム（AzureAISearchなど）
5. **大規模言語モデル（LLM）**: 最終的な回答を生成するAIモデル（GPT-4、Claudeなど）


## RAGのメリット
1. **最新情報へのアクセス**: モデルの学習後に発生した情報も活用できる
2. **専門知識の活用**: 社内文書や専門資料を参照できる
5. **ハルシネーションの軽減**: 事実に基づいた回答が増え、AIの創作が減る
6. **コストパフォーマンス**: 完全なファインチューニングよりも低コストで実現可能

## まとめ
「RAG」という用語、最初は謎でしたが、調べてみると生成AIの性能と信頼性を大きく向上させる重要な技術だと分かりました。特に企業内の非公開情報や専門知識をAIに活用させる上で、現時点では最も現実的なアプローチだと思います。最近では、大手の事業会社がRAGを活用したAIソリューションを導入しているというニュース記事もよく見かけるようになり、技術としての普及も進んでいるようです。

## 参考資料
https://www.nri.com/jp/knowledge/glossary/rag.html
給料やリモートワーク目的でエンジニアにはなるな 〜嫌われないEMになるために〜

エンジニアリングマネージャー（以下、EM）という“コードを書かない人間”について解説します。彼らの多くは部下から嫌われがちですが、なぜそうなるのか、さらに優秀なEMはどう振る舞うのかについて紹介します。

## 嫌われるEMの特徴

- コードを書かない
- 給料が高い／どこでもリモートで働けるからエンジニアになった
- 部下が困っていることに対して、教科書的なマネジメントしかできない
- 部下が優秀だと評価されることがバレている

### コードを書かないことに誇りを持つ

コードを書かないことを自慢し、現場のエンジニアに対して「まだコード書いてるの？」「マネジメント経験は？」と上から目線で言ってくるタイプのEMが存在します。
IT土方と呼ばれていた時代を思い出す思想の持ち主です。(EMは現場監督)
EMはだいたい年齢高いので、IT土方と呼ばれていた時代に頑張っていた世代かもしれません。

### 給料やリモートワーク目的でエンジニアになった

本来、エンジニアは技術への興味やものづくりへのモチベーションが求められます。しかし、稼げるとかリモートで働けるからという理由だけでエンジニアになり、そのままEMになった人は特に問題です。技術的な背景が薄いので、部下の困りごとに具体的なアドバイスをできないことが多いです。
仕事終わりにOSSで活動していたり、休みの日は趣味プログラミングをしているEMは尊敬されています。

### 部下の悩みに“なんでそうなってると思う？”としか言わない

部下が要件の不明瞭さやタスクの不確定要素に悩んでいるのに、教科書どおりに「なんでそうなっていると思う？」と返すだけ。問題解決の糸口を一緒に探るわけでもなく、ただ部下に時間を浪費させるだけになってしまいます。

### 優秀な部下がいると評価される

部下が優秀なら、自分はなにもせずともEMの目標は達成され、評価が上がり、出世していきます。
特に会社の売上の柱となっている大規模プロジェクトを担当しているEMは、あまり動かなくても成果が出るにいるため、ほとんど仕事をしなくても勝手に評価されていくケースがあります。
エンジニアがプロダクト思考だと、本当になにもせずにEMは出世できます。

## 優秀なEMの特徴

一方で、優秀なEMは現場からもリスペクトされます。彼らの特徴としては、以下のような点が挙げられます。

### ベースとなる技術を理解している
コードを書かなくても、エンジニアリングの背景知識はあって当然です。
Reactが流行ってしばらくたちましたね！！！REST、RDBの基本も分からないEMがいました。

### 部下を支援する姿勢
単に「なんでそうなっていると思う？」で終わらせず、問題の本質を一緒に探り、必要に応じて**自分自身**も行動する。
部下の悩みは、だいたいEMである自分のせいだと思ってください。

### 相手をリスペクトする
100万のエンジニアの5倍コード書いける優秀なエンジニアは給料1.2倍なのすごいよね
そして、その優秀なエンジニアよりEMの方が給料高いです。ヘイトが貯まるだけです。

### 上を目指す

役員になったEMは優秀だったぜ
お前が優秀ならば部下は無能だから、上が頑張るしか無い

## 対策
エンジニアを目指すなら、技術が好きで極めたいという気持ちを持つ方が幸せになれます。
**部下が辞めたらEMの評価は下がります。**
今すぐ転職しましょう。EMに不満を抱いているあなたは優秀なエンジニアである可能性が高いです。
調理ロボット: エンジニアのための調理自動化の革命

近年、調理ロボットが大きな注目を集め、食品の調理方法、提供方法、さらには概念化の方法までも変革しています。これらのロボットは、反復的な調理作業を自動化し、効率を最適化し、精度を確保するように設計されており、ロボット工学、AI、IoT、自動化技術に携わるエンジニアにとって魅力的な分野となっています。
完全なレポートを入手する: https://www.marketresearchfuture.com/reports/cooking-robot-market-22421 

自動化、メカトロニクス、組み込みシステム、AIを研究しているエンジニアにとって、調理ロボットの分野は、スマートホームから工業用食品生産まで、さまざまな業界に適用できる、再利用性が高く用途の広い知識とツールを提供します。この記事では、調理ロボットとその背後にあるテクノロジー、そしてエンジニアがこの進化する分野にどのように関与できるかについて詳しく説明します。
調理ロボットとは？
調理ロボットは、人間の介入を最小限に抑えて食事を準備するように設計された自動化システムです。これらのロボットは、 AI 駆動型の意思決定、ロボットア
ーム、マシンビジョン、IoT 統合を活用して、次のようなタスクを実行します。
•	材料を切る、スライスする、さいの目に切る
•	食べ物をかき混ぜる、混ぜる、ひっくり返す
•	正確な温度で調理する
•	調味料や液体を正確に分配する
•	ハンバーガー、サラダ、パスタなどの複雑な料理を組み立てる
完全自動化されたキッチンシステム、ロボットシェフ、食品組み立てボット、人間と一緒に働く共同調理アシスタントなど、さまざまな形態があります。
調理ロボットを支えるコア技術
調理ロボットの開発や改良に関心のあるエンジニアにとって、関連する主要な技
サンプルレポートを入手する: https://www.marketresearchfuture.com/sample_request/22421 

術を理解することは非常に重要です。
1. ロボット工学とメカトロニクス
•	多軸動作を備えたロボットアームにより、食品のかき混ぜ、ひっくり返し、盛り付けを細かく制御できます。
•	エンドエフェクタとグリッパ。
•	正確な動作制御を実現する精密アクチュエータとサーボモーター。
2. コンピュータビジョンと機械学習
•	食材、調理器具、食事の盛り付けを認識するためのオブジェクト検出アルゴリズム。
•	食品の食感、色、焼き加減をリアルタイムで監視します。
•	時間の経過とともに調理技術を向上させる強化学習。
3. IoTとスマートキッチンの統合
•	温度、湿度、調理の進行状況を追跡するための接続されたセンサー。
•	食材の入手状況に基づいて自動的に調整するクラウドベースのレシピ データベース。
•	モバイル アプリとスマート ホーム システムを介したリモート監視と制御。
4. AIによる意思決定
•	音声起動による調理コマンドのための自然言語処理 (NLP) 。
•	食事の好みと栄養に基づいたAI を活用した食事プランニング。
•	自動化されたトラブルシューティングと自己診断により、スムーズな操作が保証されます。
エンジニアが調理ロボットに貢献する方法
1. モジュール型およびオープンソースソリューションの開発
•	さまざまな料理に合わせてカスタマイズできるモジュール式ロボットアームを設計します。
•	アクセシビリティを向上させるオープンソースの調理自動化フレームワークに貢献します。
2. 人間とロボットのコラボレーションの強化
•	直感的なユーザーインタラクションを実現するジェスチャー制御または音声対応のインターフェースを作成します。
•	キッチン環境での怪我を防ぐためにロボットの安全機構を改善します。
3. AIベースのレシピ生成の最適化
•	さまざまな調理技術について AI モデルをトレーニングし、ロボットの適応性を高めます。
•	パーソナライズされた食事の推奨のためのフィードバック ループを実装します。
4. 調理ロボットとスマートホームの統合
•	食料品リストや食事プランと同期するIoT 駆動型調理アシスタントを開発します。
•	Alexa や Google Assistant などの音声アシスタントと統合することで、ホームオートメーション エコシステムを強化します。
調理ロボットの未来
調理ロボットの将来は、より適応性が高く、自己学習型で、協調的なシステムへと進化しています。新たなトレンドとしては、次のようなものがあります。
•	複数の料理を同時に調理できる、完全に自律的なロボットキッチン。
•	個人の食事ニーズに合わせたAI 搭載の食事カスタマイズ。
•	3D 食品プリントの統合。
•	AI を活用したエネルギー効率技術を使用した持続可能な調理ソリューション。
エンジニアとしてこの分野に貢献することで、自動化や AI アプリケーションが進歩するだけでなく、食事の準備がより速く、より安全で、より効率的になることで日常生活が向上します。
fs.readFileSync() + Math.max()　標準入力と最大値の求め方を学んだ！

高2の僕、Paizaの「最大値を求めよ」という問題で、なぜかsort()を使って遠回り(´;ω;｀) 調べたらMath.max()で一発だったし、fs.readFileSync()を使えば競プロ向きのやり方を知ったから使ってみた！  


NG①：sort()で最大値？無駄に遠回り  
```js
const lines = [...標準入力...];  
const sorted = lines.slice(1).map(Number).sort((a, b) => b - a);  
console.log(sorted[0]);  
```
・比較のコストが無駄（最大値だけ知りたいのに全体を並べ替えてる）。
・sort()はデフォルトだと文字列比較なので、意図しない並びになることも。

何でこうなったか…　まずは、調べずに今知っている知識で頑張ってみようと頭をひねった結果、最近.sortで並び替えをできると学んだからこれで一番大きい数字を配列の一番初めに入れて出力すればいいじゃん！ってなったから(/ω＼)

↓readlineで1行ずつ読むのは遅い
```js
const readline = require('readline');
const rl = readline.createInterface({ input: process.stdin });

const lines = [];
rl.on('line', (line) => lines.push(line));
rl.on('close', () => {
    console.log(Math.max(...lines.slice(1).map(Number)));
});
```  
・非同期処理で1行ずつ読み込むため、行数が増えると遅くなる。
・競技プログラミングではこの方法は非推奨らしい。

OK：fs.readFileSync() + Math.max()で最適化！
```js
const fs = require("fs");

const input = fs.readFileSync("/dev/stdin", "utf-8").trim();
const lines = input.split("\n");
console.log(Math.max(...lines.slice(1).map(Number)));
```


・同期処理なので一発で入力を読み取れる。
・.split("\n") で即配列化、map(Number) で型変換もスッキリ。
・Math.max(...配列) で最大値を瞬時に取得（sort()いらない！）。


結論：競プロならfs.readFileSync() + Math.max()一択！


[僕の失敗談と解決話](https://paizabeginner.wordpress.com/2025/02/26/paiza%e3%81%a7%e5%9f%ba%e6%9c%ac%e3%83%9e%e3%82%b9%e3%82%bf%e3%83%bc%e6%9c%80%e5%a4%a7%e5%80%a4%e3%82%92%e6%8e%a2%e3%81%9b%ef%bc%81%e2%86%92%e3%80%8cmath-max%e3%81%a7%e3%81%84%e3%81%84%e3%81%98/)
私がエンジニア1年目で行ったGit学習について

# はじめに

今では必要なGit操作はできるようになりましたが、昨年はGitが全く分からず苦戦していました。
全部覚えるのは難しいと思いますし、今は全部覚えておく必要はないと思っています。
そのため、最低限業務に必要なGit操作を共有します。

# 必要なGitコマンド

業務に必要なGitコマンドを共有しますが、初めはSourcetreeでの操作を覚えましょう。

```
git pull      // 必須
git checkout  // 必須
git brach     // リリース時とかに実行することが多いイメージです。
git status    // リリース時とかに実行することが多いイメージです。
git add       // 必須
git commit    // 必須
git push      // 必須
git stash     // コンフリクトが起きた時に自分は知りました。
git reset     // なにかしら失敗したときに自分は知りました。
git log       // SourcetreeはGUIで見れるため、リリース作業の時にコマンドを打ち始めて知りました。
```

- 必須箇所は操作（どこを押せばいいか）をまず覚えましょう。（覚えることで、同じプロジェクトのPLに聞く回数が減ります。）
- 必須操作を覚えたら、それぞれ何をやっているかを覚えましょう。（この操作ってこういうことをしていると人に伝えられるレベル）
    - 私の行っていた流れを以下に記載します。
    - （例）プルリクを作成するというタスクがあったとします。
    - 必要なコマンド（操作）を調べたうえで書き出す。（どの順番で実行するかまで）
    - 実行する前に、Gitについて詳しい人に確認する
    - 実行するコマンド（操作）が違った場合、再度調べる（良い失敗）
    - 再度、確認しコマンド（操作）を実行
- 必須と書いていないものは、使うときに調べて、ローカル環境で何回実行しても良いコマンドであれば何回も実行して覚える。
    - 意味をある程度理解した上で回数を重ねることが良いと思います。

# Gitコマンド学習後
1. Sourcetreeの概要、使い方（先ほど記載した内容）
2. それぞれのブランチの役割（[参考サイト](https://blog.cloudsmith.co.jp/2020/08/312/)）
3. feature → develop → masterの流れ
4. 流れの説明を聞いてから実際に枝分かれしている図でどこがmasterブランチで、そこからdevelopブランチが切られていてと図を見て理解する

# おわりに

## 業務に必要な知識
- Git
- Linuxコマンド
- SQL

これらは知識幅がかなり広いです。
そのため先ほど送ったGitのように最低限の知識から身に着けていく（使ってみる）のが良いと思います。
長々と記載してしまいましたが、Gitに限らずですが、新人のうちに良い失敗をたくさんしてそこから学ぶのが1番成長に繋がると思っています。
どの作業も初めから完璧にできるものはないと思いますので、一個ずつ覚えていきましょう。
SharePoint Online Management Shell 備忘録

# はじめに

SharePointOnline（ノーコード）で社内ポータルサイトを構築した際の備忘録です。

# [Office 365 グループに紐付けられたチームサイトの完全削除手順](https://learn.microsoft.com/ja-jp/sharepoint/delete-site-collection)

チームサイトは画面で完全削除ができないためSharePoint Online Management Shellを使用して完全削除を行う。

```
# SharePointにログイン
Connect-SPOService -Url https://hogehoge.sharepoint.com

# [削除されたサイト] にあるサイトコレクション一覧を取得
Get-SPODeletedSite

# 以下のコマンドで完全削除（https〜は2つ目のコマンド実行時にurlが一覧で表示されるため対象のものをコピペ）
Remove-SPODeletedSite -Identity https://hogehoge.sharepoint.com/sites/hogehoge

# 削除後確認
Get-SPODeletedSite
```

# [リダイレクト設定削除](https://learn.microsoft.com/ja-jp/sharepoint/manage-site-redirects)

サイトのアドレスを変更するとそのアドレスはリダイレクト設定から削除しないと再度使用できない。

```
# SharePointにログイン
Connect-SPOService -Url https://hogehoge.sharepoint.com

# リダイレクト設定一覧を取得
Get-SPOSite -Template REDIRECTSITE#0

# 以下のコマンドで完全削除（https〜は2つ目のコマンド実行時にurlが一覧で表示されるため対象のものをコピペ）
Remove-SPOSite -Identity -Identity https://hogehoge.sharepoint.com/sites/hogehoge

# 削除後確認
Get-SPOSite -Template REDIRECTSITE#0
```

# 公式ドキュメント

- https://learn.microsoft.com/ja-jp/
未来への道: インダストリー 4.0 と共有エンジニアリング知識の力

第 4 次産業革命であるインダストリー 4.0 は、製品の設計、製造、流通の方法を変革しています。これは、相互接続されたシステム、データに基づく意思決定、インテリジェントな自動化の世界です。しかし、この複雑な状況を乗り越えるには、継続的な学習とコラボレーションが必要です。そこで、エンジニアリング知識の共有に重点を置いたQiitaのようなプラットフォームが非常に重要になります。

インダストリー4.0: 急速な進化の展望

インダストリー 4.0 は単なる流行語ではありません。私たちの業務運営方法に根本的な変化をもたらします。インダストリー 4.0 には次のようなテクノロジーが含まれます。

モノのインターネット (IoT):機械やデバイスを接続してデータを収集および共有します。
人工知能 (AI) と機械学習 (ML):インテリジェントな自動化と予測分析を可能にします。
クラウド コンピューティング:スケーラブルでアクセス可能なデータ ストレージと処理を提供します。
ビッグデータ分析:膨大な量のデータから貴重な洞察を抽出します。
サイバーフィジカルシステム (CPS):物理プロセスとデジタルプロセスを統合します。
付加製造（3D プリント）：迅速なプロトタイピングとカスタマイズされた生産を可能にします。
これらのテクノロジーが融合して、スマート ファクトリー、最適化されたサプライ チェーン、パーソナライズされた製品が生まれています。ただし、急速に進化する環境で先頭に立つには、継続的な学習と知識の共有が必要です。

詳細なブログを閲覧する - https://www.marketresearchfuture.com/reports/industry-4-0-market-2375

Qiitaアプローチ:共同エンジニアリングの促進

Qiita の哲学に触発されて、エンジニアが以下のことができるコラボレーション スペースを思い描くことができます。

再利用可能で多用途な情報を収集する: Qiita が貴重なエンジニアリング知識のリポジトリを目指しているのと同様に、インダストリー 4.0 に関連するすぐにアクセスでき、適用可能な情報を提供するプラットフォームが必要です。これには、ベスト プラクティス、コード スニペット、チュートリアル、実際の例が含まれます。
学習曲線の短縮:経験とソリューションを共有することで、エンジニアは他のエンジニアがよくある落とし穴を回避し、学習を加速できるように支援できます。これは、エンジニアが「同様のことを学習したり苦労したり」するのに費やす時間を削減するというQiita の目標と一致しています。
接続とコラボレーション:インダストリー 4.0 は本質的にコラボレーションです。相互作用と知識の共有を促進するプラットフォームは、イノベーションを促進し、開発を加速することができます。Qiitaが強調しているように、「ここを「あなた」と「誰か」がつながる場所にしましょう。」
エンジニアリング アイデンティティを確立して表現する:専門知識を共有し、コミュニティに貢献することで、エンジニアは評判を築き、スキルを披露することができます。インダストリー 4.0 の文脈では、これにはオープン ソース プロジェクトへの貢献、ケース スタディの共有、教育リソースの開発などが含まれます。
インダストリー4.0時代の「エンジニア」の定義

Qiita の「エンジニア」を「プログラミングの知識と経験を活用する人」と包括的に定義することは、インダストリー 4.0 の文脈で特に重要です。この幅広い定義は、次のことを認識しています。

インダストリー 4.0 には、従来のプログラミングだけでなく、多様なスキルが必要です。
データ サイエンティスト、オートメーション スペシャリスト、IoT 開発者など、多くの専門家が、必ずしも毎日コードを書かなくても、インダストリー 4.0 に貢献しています。
継続的な学習は不可欠であり、プログラミングをまだ学習している人もコミュニティの貴重なメンバーです。
サンプルブログPDFのリクエスト - https://www.marketresearchfuture.com/sample_request/2375

インダストリー4.0のためのコラボレーションエコシステムの構築

インダストリー 4.0 の可能性を最大限に引き出すには、エンジニアが以下のことを実行できる共同エコシステムを構築する必要があります。

知識とベストプラクティスを共有します。
オープンソースのツールとリソースを開発します。
研究開発プロジェクトで協力します。
エンジニアを目指す人々に指導とサポートを提供します。
コラボレーションと知識共有の文化を育むことで、インダストリー 4.0 テクノロジの導入を加速し、業界全体でイノベーションを推進できます。エンジニアがつながり、情報を共有し、プロフェッショナルとしてのアイデンティティを構築できるプラットフォームは、このプロセスに不可欠です。Qiitaがプログラマーにとって貴重なリソースであるように、インダストリー 4.0 エンジニアのより広範なコミュニティをサポートするためにも同様のプラットフォームが必要です。
elm327の研究 その19

# 概要
elm327の研究やってみた。
obdコマンド、01 00, 01 20, 01 40をデコードしてみた。

# 成果物

<p class="codepen" data-height="700" data-default-tab="html,result" data-slug-hash="mydrvxX" data-pen-title="elm327 pid 0" data-user="ohisama" style="height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
  <span>See the Pen <a href="https://codepen.io/ohisama/pen/mydrvxX">
  elm327 pid 0</a> by ohisama (<a href="https://codepen.io/ohisama">@ohisama</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://public.codepenassets.com/embed/index.js"></script>


以上。
新人エンジニアに公式ドキュメントを丸投げするのはNG？適切な学習サポートの考え方

# 公式ドキュメント丸投げとは？

「公式ドキュメントを読んでおいて」と言って、新人エンジニアに学習を丸投げするケースは珍しくありません。
確かに、公式ドキュメントは最新かつ正確な情報源 ですが、新人がその内容を理解し、適切に活用するには一定の知識と経験が必要 です。

- 公式ドキュメントの構成や専門用語に慣れていない
- どこを重点的に読むべきかわからない
- サンプルコードをどう実装に活かすかがわからない

こうした問題があるため、単に「読んでおいて」と伝えるだけでは学習効果が薄く、成長を妨げる可能性がある のです。

#  公式ドキュメント丸投げの問題点

## ① 情報量が多すぎて挫折しやすい

公式ドキュメントは網羅的に記載されているため、初心者にとって情報量が多すぎる ことがあります。

- どこから手をつけていいかわからず、結果的に学習が進まない。
- 必要な情報を見つけられず、調べるのに時間がかかる。
- 記述が抽象的で、具体的な使い方がイメージしにくい。

`解決策：「まずはこの章を読んで、この部分を試してみよう」と具体的な指示を出す。`

## ② 実際の開発との関連がわからない

公式ドキュメントの説明は、あくまで技術の基本や仕様の紹介が中心であり、
実際のプロジェクトでどう活かすのか まで記載されているわけではありません。

`例：「Spring Security」のドキュメントには認証の仕組みが詳細に書かれているが、
プロジェクトでの具体的な実装方法は自分で考えなければならない。`

```
解決策：
「実務でどう使うか？」の視点を伝える
社内の既存コードと照らし合わせながら説明する
```

## ③ 質問しにくい雰囲気が生まれる

新人にとって、公式ドキュメントを読むだけでは理解しきれない部分が多くあります。
しかし、「とりあえず読んでおいて」と丸投げされると、

- 「これくらい自分で理解しなければならないのでは？」 と萎縮してしまう。
- 質問すること自体に罪悪感を覚えてしまう。
- 結果として、理解が不十分なまま進めてしまい、後々ミスや手戻りが発生する 可能性があります。

`解決策：「わからない部分があればすぐに質問してね」と質問しやすい環境を作る。`

# 公式ドキュメントを活用するための適切な指導方法

## ① 目的を明確にする

「この機能を実装するために、この部分を読んでみよう」とゴールを示す ことで、
必要な情報を探しやすくなります。

## ② 最初は一緒に読む

ドキュメントの構成や、読み方のコツを教えるために、最初のうちは一緒に読み進める のが効果的です。

## ③ サンプルコードを動かしてみる

理論だけでは理解しづらいため、公式ドキュメントに記載されているサンプルコードを
実際に動かしながら学ぶ ことで、より深く理解できます。

## ④ 質問しやすい環境を作る

「わからない部分があれば、どこでつまずいたのか教えて」と伝え、気軽に質問できる雰囲気を作る。

# まとめ

- 公式ドキュメント丸投げはNG
- 適切な指導方法を意識する
    - 目的を明確に伝える：「この部分を読んで、試してみよう」
    - 最初は一緒に読む：「こういう構成になっているよ」
    - サンプルコードを動かしながら学ぶ
    - 質問しやすい環境を作る：「どこでつまずいた？」

新人エンジニアが成長するためには、公式ドキュメントを適切に活用できるようサポートすることが重要です。
「読んでおいて」ではなく、「どう読めばいいか」を一緒に考えていくことが大切です。
[Go言語] ioutilを使うのはやめよう

## はじめに
こんにちは、Go言語初学者です。
APIを叩いてレスポンスを取得しようとした際に、`ioutil`というライブラリを用いて記述すると、vscodeで警告がでました。


どうやら`ioutil`のアップデートが止まっており、公式でも別のモジュールを推奨しています。
内部構造までは追えていませんが、現時点でも`ioutil`を使用されている方はリファクタリングをしてみてください。


## 実装方法

今まで書いていたioutilの記法を以下のように変更することで解決出来ます。

![スクリーンショット 2025-02-26 18.46.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3767231/e58e1d2b-678f-461a-b571-10ba971ad65f.png)



### 参考記事
https://text.baldanders.info/golang/deprecation-of-ioutil/


## 最後に
今回は`ioutil`を使わずに書く方法をまとめました。
github copilotやchatgpt等のAIはまだまだioではなくioutilで書かせてくるので、気をつけましょう。
DevinとOpenHandsを比較して、完全無料でOpenHands使ってみた


## はじめに

OpenHands面白そうだし、うまく完全無料で使いたいなと思ったのでその忘備録

## Devinとは

知ってる方が多そうですが、一応概要（by copilot）

>Devinは、Cognition Labsが開発した完全自律型AI開発エージェントです。
>ソフトウェア開発の全プロセスを一手に引き受け、設計、コーディング、デバッグ、テスト、デプロイまで対応します。
>
>主な特徴は以下の通りです:
>
> - 完全自律型AI: 自律的にソフトウェア開発を進める。
> - 幅広いタスク対応: コード解析、バグ修正、最適化、テスト、デプロイを自動化。
> - 対話形式: エンジニアと対話しながら作業を進める。
> - 開発ツール互換: VSCodeなどと統合可能。

## OpenHandsとは

こちらも同じように（by copilot）

>OpenHandsは、オープンソースの自動開発AIエージェントです。
>人間の開発者が行う多くのタスクをAIが代行できるように設計されています。
>具体的には、コードの修正、コマンドの実行、Webの閲覧、API呼び出しなどが可能です。
>開発プロセスを効率化し、開発者がより創造的な作業に集中できる環境を提供します。

## DevinとOpenHandsの違い

比較もしてもらってます（by copilot）

> | 特徴         | Devin                                  | OpenHands                                 |
> | ------------ | -------------------------------------- | ----------------------------------------- |
> | 提供形態     | 商用サービス                           | オープンソースプロジェクト                |
> | ホスティング | ホスティング型のソリューション         | ユーザー自身がホスティング                |
> | コスト       | 月額500ドルからの有料サービス          | ソフトウェアは無料、API料金は別途必要     |
> | ソースコード | クローズドソース（非公開）             | オープンソース（MITライセンス）           |
> | 主な機能     | プルリクエストのレビュー、移行作業など | コード修正、コマンド実行、API呼び出しなど |

:::note warn
主な機能の部分が違いますが、できることはほぼ一緒です。
質や使い勝手が異なるくらいの感覚かなと
:::

## OpenHandsを無料で使う

### 1. Google AI StudioでAPIキーを取得する

<https://aistudio.google.com/app/apikey?hl=ja>から直接発行できると思います。

使用に制限はありますが、無料で使えるAPIキーです。

案内通りにやればAPIキー作れると思うので手順割愛

### 2. ローカルにOpenHandsを立てる

Dockerコマンドを行える環境で下記コマンドを実行してください。

```sh
docker pull docker.all-hands.dev/all-hands-ai/runtime:0.26-nikolaik

docker run -it --rm --pull=always \
    -e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:0.26-nikolaik \
    -e LOG_ALL_EVENTS=true \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v ~/.openhands-state:/.openhands-state \
    -p 3000:3000 \
    --add-host host.docker.internal:host-gateway \
    --name openhands-app \
    docker.all-hands.dev/all-hands-ai/openhands:0.26
```

:::note warn
OpenHandsはOpenHandsが爆速で更新かけているので、起動のコマンドは適宜GitHub確認してください。
<https://github.com/All-Hands-AI/OpenHands?tab=readme-ov-file#-quick-start>
:::

### 3. OpenHandsにAPIキーを渡す

APIキーを入力する画面になるので、適切なモデルなどを選んでから入力します。

![OpenHands_APIKey_Input.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3941133/c7da6eb2-1b83-4fcf-8441-058ebb3fbe27.png)

:::note info
推奨されているモデルはanthropicのclaude-3-5-sonnet-20241022らしいですが、
リクエスト数などに制限がありますが、無料でそこそこ使いたいというのが主旨のため、
今回はGemini 2.0 Flashを使います。
:::

### 4. OpenHandsで好きなアプリを作成する

適当に入力してみてください。
勝手に作ってエラー解決してくれます。

下記はTODOアプリを作ってもらっている最中の画面です。

![OpenHands_sample.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3941133/0a2cebf5-b28f-4475-b0af-646142da5ffc.png)

画面左側でチャット、右側上部にソースコードや稼働しているアプリ、画面右下にコンソールがあります。

:::note warn
Docker側のログに細かい情報が出てきたりもするので、実際に使う際はそっちも見る必要があるかもです。
:::

## 終わりに

GeminiのAPIは無料で使う分には使用制限があるので、全然動かないかなと思いましたが、そこそこ使えたのでお金かけずにDevinみたいなことをしたいのであれば、この構成がいいかも...？
報連相力をつけて、コミュニケーションコストを削減しよう

# はじめに

「報連相（ほうれんそう）」は、報告・連絡・相談 の3つの要素を指す社会人の基本スキルです。
エンジニアの仕事は、個人作業のイメージが強いかもしれませんが、実際にはチームでの協力や円滑なコミュニケーションが不可欠 です。

報連相を適切に行うことで、トラブルの早期発見、業務のスムーズな進行、チーム全体の生産性向上 が期待できます。

# エンジニアにとって報連相が重要な理由

## ① ミスやトラブルの早期発見・防止

エンジニアの仕事では、小さなミスが大きな障害につながる ことがあります。

適切な報告 を行えば、問題を上司やチームが早期に把握し、迅速な対応が可能になります。
事後報告では手遅れ になることもあるため、問題が起こりそうな時点で相談することが重要です。

`例：「開発中の機能で想定外のバグが発生し、リリースが遅れる可能性がある」と気づいたら、すぐにチームに報告する。`

## ② チーム全体のスムーズな進行

エンジニアは個々の作業に集中しがちですが、開発は複数のメンバーが関わるチームプレー です。

他のメンバーがどのような作業をしているのか、進捗状況を共有することでタスクの調整がしやすくなります。
仕様変更やスケジュールの遅延が発生した場合、素早く連絡 することで、影響を最小限に抑えられます。

`例：「APIの仕様変更により、フロントエンドの実装に影響が出る」場合、関連メンバーに速やかに連絡する。`

## ③ 効率的な問題解決

一人で悩み続けるよりも、早めに相談する ことで、適切なアドバイスを受けられます。
他のメンバーの知見を活かせば、短時間で問題を解決 できる可能性が高まります。
`例：「未経験のフレームワークを使うことになり、実装方法が分からない」場合、先輩エンジニアに相談することで効率的に学習できる。`

# エンジニアに必要な報連相のポイント

## 報告（状況を正しく伝える）

上司やチームに進捗状況や問題を適切に伝えること。

- 定期的な進捗報告を行う（例：毎日の朝会、週次ミーティングなど）
- 進捗が遅れている場合は、原因と今後の対応策を明確に伝える

`ポイント：「順調です」だけでなく、「〇〇の対応が完了し、現在△△を進めています」と具体的に説明する。`

## 連絡（必要な情報を共有する）

関係者に影響を与える情報を迅速に伝えること。

仕様変更やスケジュール変更があれば、すぐに関係者へ共有 する。
チャットツールやメールを活用 し、適切な手段で伝達する。

`ポイント：関係者に影響がある情報は、「誰に」「どのタイミングで」伝えるべきかを考える。`

## 相談（問題が起こる前に対策をとる）

問題を一人で抱え込まず、適切なタイミングで相談すること。

自分で解決できそうにない課題は、早めに上司やチームメンバーに相談する。
「どうすれば良いか分からない」となる前に、選択肢を持って相談 すると効果的。

`ポイント：「〇〇の実装で悩んでいます。A案とB案を考えたのですが、どちらが適切でしょうか？」と選択肢を提示して相談する。`

# 参考サイト

- https://speakerdeck.com/naohiro_nakata/technicalwriting?slide=31
    - 31~33を確認。文章のまとめるプロセスが分かる。
- https://www.bloom-promotion.jp/journal/content-marketing/to-write-better-sentences
    - 相手に伝わる文章の基礎が分かる。結論から述べるなど。

# おわりに

PREP法、ロジカルライティング、テクニカルライティングなどについて調べて実践してみるとGOOD。
【daisyUI】bg-base-100指定時に背景色が変化する現象の解決方法

# はじめに
`daisyUI`で背景色を指定していた際、デバイスによって背景色が変わってしまう現象が発生しました。本記事ではその原因と解決策について紹介します。

# 現象
PCとスマホで背景色が異なって表示されてしまいました。

PC
![スクリーンショット 2025-02-26 15.49.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835217/d25d39d5-7c1c-4e28-93af-81b5b8f22138.png)

SP
![スクリーンショット 2025-02-26 15.51.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835217/ad31be85-acee-4374-b6f9-ee12d6267b08.png)


# 原因
`bg-base-100`を使用すると、スマホをダークモードにしている場合に自動で背景色が変化する仕様になっているようです。

```react
const Card = ({ children }) => {
  return <div className="card bg-base-100 w-70 shadow-xl rounded-2xl"> {children}</div>;
};

export default Card;
```

https://daisyui.com/blog/how-to-add-new-colors-to-daisyui/

# 解決策
今回は背景を白に固定したかったため、`bg-base-100`ではなく`bg-white`に変更しました。これにより、ダークモードの影響を受けずに常に白い背景を維持できます。

```react
const Card = ({ children }) => {
  return <div className="card bg-white w-70 shadow-xl rounded-2xl"> {children}</div>;
};

export default Card;
```

# 終わりに
`daisyUI`の`base`系のカラーはダークモードの影響を受けるため、意図しない色の変化が発生することがあるようです。背景色を固定したい場合は`bg-white`や`bg-gray-100`などの具体的な色指定をする方が良いと思いました。

# 参考
https://daisyui.com/blog/how-to-add-new-colors-to-daisyui/
業務中に眠くなる原因と改善策：集中力を維持するためにできること

# はじめに

仕事中に眠気に襲われて集中できないことは、多くの人が経験する課題です。本記事では、業務中に眠くなる主な原因と、それぞれの改善策を紹介します。

## 1. 業務中に眠くなる主な原因

業務中の眠気には、主に以下の3つの要因が考えられます。

- 情報過多：頭の中が情報でいっぱいになり、処理が追いつかなくなる。
- 危機感不足：タスクに対する緊張感がなく、気が緩んでしまう。
- 睡眠不足：そもそも睡眠が足りておらず、身体が休息を求めている。

下記にそれぞれの原因ごとの、具体的な改善策をご紹介します。

## 2. 改善策①：情報過多を防ぐ

情報が多すぎると脳が疲れ、眠気の原因になります。情報を適切に処理する工夫が必要です。

### アウトプットを増やす

- 頭の中に情報を詰め込みすぎず、こまめにメモを取る。
- 重要なことは「書き出して整理」することで、記憶の負担を減らす。
- 必要な情報だけを優先的に処理し、不要な情報は意識的に排除する。

### 情報を整理する習慣をつける

- 仕事の開始時や終了時に、タスクやメモを見直して情報を整理する。
- 情報をグループ化し、関連性を意識しながら管理する。

## 3. 改善策②：危機感を持つ

タスクに対する意識が低いと、気が緩んで眠気につながります。適度な緊張感を持つ工夫をしましょう。

### 細かく期限を設定する

- 大きなタスクを細かく分け、それぞれに「締切」を設定する。
- 短いスパンで目標を作ることで、集中力を維持できる。
- 自分自身に適度なプレッシャーをかけることで、ダラダラと仕事をしない習慣をつける。

### タスク管理ツールを活用する

- ToDoリストやタスク管理ツール（Trello, Notion, Microsoft To Do など）を活用し、可視化する。
- 進捗状況を記録し、「締切が近づいている」という意識を持つ。

## 4. 改善策③：睡眠不足を解消する

睡眠不足が続くと、どれだけ集中しようとしても眠気に勝てません。まずは睡眠の質を改善しましょう。

### 適切な睡眠時間を確保する

- 自分に合った睡眠時間を把握し、十分な休息を取る。
- 平日の睡眠不足を週末にまとめて補うのではなく、毎日一定の睡眠時間を確保する。

### 睡眠の質を向上させる

- 寝る前1時間はスマホを見ない：ブルーライトを避け、リラックスモードに切り替える。
- お風呂に浸かる：ぬるめのお湯に浸かることで、深い睡眠を促す。
- 快適な寝具を選ぶ：枕やマットレスを見直し、睡眠環境を整える。

### 昼休憩に短時間の仮眠を取る

- 昼食後に10〜15分の短時間睡眠を取ることで、午後の眠気を軽減できる。
- 仮眠後はカフェインを摂取すると、すっきり目覚めやすい。

# まとめ

業務中の眠気は、情報過多・危機感不足・睡眠不足 の3つが主な原因です。それぞれに対して適切な対策を講じることで、集中力を維持しやすくなります。

- 情報過多 → メモを活用し、情報を整理する。
- 危機感不足 → 細かい期限を設定し、適度な緊張感を持つ。
- 睡眠不足 → 睡眠の質を改善し、昼休憩に短時間の仮眠を取る。

日々の習慣を少しずつ改善することで、眠気に負けず、仕事の生産性を高めましょう。
ホスティングについて調べてみた


## はじめに
こんにちは！SIerに入社して１年目の新人エンジニアです。日々の業務で先輩たちが当たり前のように使っている用語で「えっ、それって何？」と思ったものを調べて、自分なりにまとめていきます。

今回は「ホスティング」について。

## 目次
- [「ホスティング」って何？](#ホスティングって何)
- [ホスティングとハウジングの違い](#ホスティングとハウジングの違い)
- [なぜホスティングサービスが生まれたの？](#なぜホスティングサービスが生まれたの)
- [ホスティングサービスの種類](#ホスティングサービスの種類)
  - [共有ホスティング](#共有ホスティング)
  - [専用ホスティング](#専用ホスティング)
  - [VPS（Virtual Private Server）](#vpsvirtual-private-server)
- [クラウドコンピューティングの誕生](#クラウドコンピューティングの誕生)
- [まとめ](#まとめ)
- [参考資料](#参考資料)

## 「ホスティング」って何？
最初は「レンタルサーバーのことでしょ？」くらいの認識だったのですが、調べてみるともう少し広い概念でした。**ホスティングとは、アプリケーションやウェブサイトをインターネット上で利用可能にするためのインフラストラクチャをサービスとして提供すること**なんです。

インフラストラクチャって何？と思いましたが、要は物理的なサーバー、ネットワーク機器、ストレージなどの設備のことです。つまり、自分でサーバーを買って設置・管理する代わりに、それを代行してくれるサービスというわけです。

## ホスティングとハウジングの違い

- **ホスティング**：サーバー自体も提供してくれて、管理も基本的にサービス提供者が行う
- **ハウジング**（コロケーションとも言う）：自社所有のサーバーを置く場所（データセンターの一角など）を提供してくれるだけで、サーバー管理は自分たちでやる必要がある

簡単に言うと、ホスティングは「マンションの賃貸」、ハウジングは「土地だけ借りて自分で家を建てる」みたいな違いだと理解しました！

## なぜホスティングサービスが生まれたの？
プロジェクトの歴史を調べていたら「昔はオンプレだった」という記述があったので、なぜホスティングサービスが生まれたのか気になりました。

1990年代後半までは、自社にサーバーを置いて担当者が保守管理を行う「オンプレミス」での運用が一般的だったそうです。でも、これには大きな課題がありました：

- サーバーなどの設備投資が必要（初期費用が高い！）
- 専門知識を持った担当者の確保が必要（人件費もかかる！）
- 24時間365日の監視体制が必要（大変！）

これらの課題を解決するために、ホスティングサービスが誕生したんですね。

## ホスティングサービスの種類
調べてみると、ホスティングには主に3つの種類があることが分かりました。

### 共有ホスティング
- 最も経済的な選択肢（安い！）
- サーバーリソース（CPU、メモリ、ストレージ）を他のユーザーと共有する
- 小規模なウェブサイトやブログに適している
- ただし、他のユーザーの影響を受けやすい（共有している他のユーザーが大量アクセスを集めると自分のサイトも遅くなる）

### 専用ホスティング
- 物理サーバー全体を1つのクライアントが専有（贅沢！）
- 共有ホスティングと比較してパフォーマンスが安定している
- カスタマイズの自由度が高い（OSやミドルウェアを好きに選べる）
- 大規模なウェブサイトやエンタープライズアプリケーションに適している
- ただし、コストは比較的高額

### VPS（Virtual Private Server）
- 共有ホスティングと専用ホスティングの中間的な選択肢
- 仮想化技術により、1台の物理サーバーを複数の独立した環境に分割
- 各環境は専用のOSとリソースを持つ
- リソースは保証されている（他のユーザーの影響を受けにくい）


## クラウドコンピューティングの誕生
ただ、従来のホスティングサービスにも課題があったようです：

- リソースの追加や削減に時間がかかる（急なアクセス増に対応できない！）
- 実際の使用量に関係なく固定料金を支払う必要がある（もったいない！）

そこで、2006年にAmazonがAWS（Amazon Web Services）を立ち上げ、「クラウドコンピューティング」という新しい形のホスティングサービスを誕生させました。

クラウドの特徴は：
- 必要な時に必要なだけリソースを利用できる（急なアクセス増にも対応可能！）
- 使用量に応じた料金体系（使った分だけ支払い！）
- オンデマンドでリソースをスケールアップ・ダウンできる


## まとめ
「ホスティング」という言葉、調べてみると単なるサーバーレンタルではなく、インターネットサービスの根幹を支える重要な概念だと分かりました。しかも、共有・専用・VPSなど種類もあって、さらにクラウドコンピューティングへと進化しているんですね！


## 参考資料
https://www.onamae.com/business/article/2947/

https://note.com/sakura_pr/n/n024fafee5c27

https://www.ntt.com/business/services/rink/knowledge/archive_75.html
新人エンジニアが最初に身につけるべき優先事項とは？

# はじめに

エンジニアとしてのキャリアをスタートすると、技術習得だけでなく、社会人としての基本スキルも求められます。本記事では、新人エンジニアが意識すべき優先度について解説します。

# 優先度別解説


## 1. 社会人マナー（最優先事項）

いくら技術力が高くても、基本的な社会人マナーが欠けていると信頼を得るのは難しいです。

- 挨拶・礼儀：元気な挨拶や丁寧な言葉遣いは基本。
- メール・チャットの作法：簡潔かつ丁寧に伝える。相手の負担を減らす工夫も重要。
- 時間管理：遅刻や納期遅れを防ぐために、スケジュール管理を徹底する。

## 2. 報連相（報告・連絡・相談）

業務を円滑に進めるためには、適切な報連相が不可欠です。

- 報告：進捗状況や問題点をこまめに伝える。
- 連絡：関係者に必要な情報を適切なタイミングで共有する。
- 相談：問題が発生したら早めに上司や先輩に相談することで、被害を最小限に抑えられる。

## 3. 技術的な学習

エンジニアとして成長するためには、技術の習得が欠かせません。ただし、学習の優先度は業務内容に応じて調整する必要があります。

- 業務で必要な技術を優先：まずは会社のプロジェクトで使われている技術をしっかり学ぶ。
- 基礎知識の習得：アルゴリズム、データ構造、SQL など、基礎的なスキルを固める。
- トレンドのキャッチアップ：最新の技術動向をチェックし、将来に備える。

## 4. チームワークの意識

個人プレーではなく、チームで成果を出す意識が求められます。

- 助け合う姿勢：困っている人がいれば積極的にサポートする。
- ドキュメント作成：業務で得た知見をチームに共有することで、効率的な開発ができる。
- 他部署との連携：エンジニアだけでなく、営業やデザイナーとも円滑にコミュニケーションを取る。

## 5. 仕事の優先順位を考える

新人のうちは与えられた仕事をこなすことが多いですが、優先順位を考えながら行動することも重要です。

- 期限が早いものを優先：締切がある業務は最優先で取り組む。
- 影響範囲の大きいタスクを重視：後回しにするとトラブルになりやすいものを優先する。
- スキマ時間を活用：ちょっとした時間に学習やタスクの整理を行う。

# まとめ

新人エンジニアが最初に意識すべきことは、「社会人としての基礎を固めること」 です。技術力を高めることは重要ですが、それ以上に報連相やチームワーク、仕事の優先順位を意識することが、信頼を得るための第一歩 となります。
エンジニア質問設計

# はじめに

エンジニアの必須スキル「報連相」。
今回は質問設計が必要な理由、テンプレートのご紹介をいたします。

# 質問設計とは

質問設計とは、相手に対して明確で的確な質問を行うための事前準備やフォーマットを指します。特にエンジニアの業務では、技術的な問題や仕様確認など、正確な情報のやり取りが重要になります。質問の意図が伝わりにくいと、余計なやり取りが発生し、業務の遅延につながることがあります。

# なぜ質問設計が必要なのか

- 回答を得るまでの時間短縮：明確な質問をすれば、相手が素早く適切な回答を返しやすくなります。
- 認識のずれを防ぐ：誤解を生む余地が少なくなり、ミスコミュニケーションを防止できます。
- 相手の負担を減らす：質問の意図が分かりやすいと、相手が考える負担が少なくなります。
- チームの生産性向上：スムーズなやり取りができることで、業務全体の進行がスピーディーになります。

# 質問テンプレートご紹介

```
お疲れ様です。
質問が〇点ございます。

1. 〇〇でよろしいでしょうか。
2. 〇〇について△△という認識であっていますでしょうか。

質問内容（結論）を最初に記載し、その後に補足事項や、必要に応じて回答期限を記載します。

ご確認よろしくお願いいたします。
（ケースによって「お手数おかけしますが、」「お忙しい中恐縮ですが、」とつける）
```

# まとめ

質問設計を意識することで、相手に負担をかけず、スムーズなコミュニケーションを実現できます。特にエンジニア同士のやり取りでは、明確な質問が業務効率を大きく左右するため、適切なテンプレートを活用して質問力を高めましょう。
【git】error: src refspec main does not match anyの対処法

<h2>症状</h2>
新しいリポジトリを作成し、ローカルのフォルダをpushしようとしたら、下記のエラーが発生しました

```terminal:error
git init
Initialized empty Git repository in hoge/.git/

git commit -m "first commit"
On branch master

Initial commit

nothing to commit (create/copy files and use "git add" to track)

git branch -M main

git remote add origin https://github.com/TKWebSE/BookOfAtCoderBeginning.git

git push -u origin main
error: src refspec main does not match any
error: failed to push some refs to 'https://github.com/hoge.git'
```

<h2>解決策</h2>
フォルダの中身が空っぽで、ファイルがなかったたので、ファイルを作って再度addとcommitしたら、pushできました

```terminal:空ファイルさくせ
git add -A

git commit -m "hoge"

git push -u origin main
```

<h2>参考</h2>

https://blog.deepblue-ts.co.jp/git/git-push-error/
Objective-C

# Objective-C

### 目次
1. [Objective-Cとは](#objective-cとは)  
2. [オブジェクト指向とは](#オブジェクト指向とは)  
3. [Swiftとの比較](#swiftとの比較)  
   - [変数の宣言](#変数の宣言)  
   - [メソッドの呼び出し](#メソッドの呼び出し)  
   - [コレクションの宣言](#コレクションの宣言)  
   - [条件分岐](#条件分岐)  
   - [ループ](#ループ)  
4. [まとめ](#まとめ)  

## Objective-Cとは

Objective-C はオブジェクト指向型のプログラミング言語であり、Apple の iOS や macOS などの開発に広く使用されている。

C言語の基本構造をベースにしており、そこに Smalltalk というオブジェクト指向言語が取り入れられている。
現在は Swift という新しいプログラミング言語が iOS アプリの開発で主流として使われている。

**Smalltalk** … オブジェクト指向の元祖

---

## オブジェクト指向とは

「もの」を組み立てるように表現してコンピュータに指示する考え方のことである。
ものを組み立ててプログラムを表現するために、ものの設計図である **クラス (車の設計図)** と設計図から作成される **インスタンス (黒い車)** が必要になる。
クラス (車の設計図) は使いまわして、複数のインスタンス (黒い車や赤い車など) を生成することができる。

参考：[クラスの概念](https://pikawaka.com/ruby/class)

---

## Swiftとの比較

### 変数の宣言

#### Objective-C
```objc
int number = 5;
NSString *string = @"Hello, World!";
```

#### Swift
```swift
var number = 5          // 型推論により自動的に Int 型
let string = "Hello, World!"  // 型推論により自動的に String 型
```

**NSString とは**
- Objective-C の文字列クラスであり、中身を変更できないオブジェクトのこと。

**型推論とは**
- プログラムのソースコードを見て、「この値は数かな？文字かな？」と自動で考えてくれる仕組みのこと。
- これは、プログラムを動かすための変換をする「コンパイラ」と呼ばれる仕組みが行なっている。
---

### メソッドの呼び出し

#### Objective-C
```objc
[myObject doSomethingWithParameter:parameter];
```

#### Swift
```swift
myObject.doSomething(parameter)
```

**WithParameterは必須ではないが、可読性を向上させるために推奨される**
(Objective-Cに関して、[myObject doSomething:parameter];とも書くことが出来る)

---

### コレクションの宣言

#### Objective-C
```objc
NSArray *array = @[@"Apple", @"Banana", @"Cherry"];
NSDictionary *dictionary = @{@"Key1": @"Value1", @"Key2": @"Value2"};
```

#### Swift
```swift
let array = ["Apple", "Banana", "Cherry"]
let dictionary = ["Key1": "Value1", "Key2": "Value2"]
```

**NSArray とは**
- 順番に要素を持つ配列。

**NSDictionary とは**
- キーと値のペアを持つデータ構造。

**NS って何？**
- **Next Step (NeXTSTEP)** の略で、Objective-C のクラス名の先頭に付けられている。

---

### 条件分岐

#### Objective-C
```objc
if (a == b) {
    // 処理
}
```

#### Swift
```swift
if a == b {
    // 処理
}
```

**Objective-CもSwiftでも書き方はシンプルで、類似している**

---

### ループ

#### Objective-C
```objc
for (int i = 0; i < 10; i++) {
    // 処理
}
```

#### Swift
```swift
for i in 0..<10 {
    // 処理
}
```

**Swift のループはシンプルなのが特徴**
- Objective-C の `for` ループでは **初期化・条件・更新** の 3 つの要素を明示的に書く必要がある。
- Swift の `for-in` ループは **範囲 (Range)** を指定するだけで簡潔に書ける。

---

## まとめ

| 比較項目 | Objective-C | Swift |
|----------|------------|-------|
| 変数宣言 | `int number = 5;` | `var number = 5` |
| 文字列 | `NSString *string = @"Hello";` | `let string = "Hello"` |
| メソッド呼び出し | `[obj doSomething:parameter];` | `obj.doSomething(parameter)` |
| 配列 | `NSArray *array = @[@"Apple", @"Banana"];` | `let array = ["Apple", "Banana"]` |
| 辞書 | `NSDictionary *dict = @{@"Key": @"Value"};` | `let dict = ["Key": "Value"]` |
| 条件分岐 | `if (a == b) {}` | `if a == b {}` |
| ループ | `for (int i = 0; i < 10; i++) {}` | `for i in 0..<10 {}` |

Objective-Cは長年 iOS 開発の中心的な言語だったが、現在は Swift が主流となっている。
Swift はシンプルで安全性が高く、可読性も向上しているため、多くの開発者が移行を進めている。ただし、既存のObjective-Cのコードベースやレガシープロジェクトでは依然として重要な役割を果たしており、Swiftとの相互運用性を活かして活用され続けている。
ドメインについて調べてみた


## はじめに

こんにちは！SIerに入社して１年目の新人エンジニアです。日々の業務で先輩たちが当たり前のように使っている用語で「えっ、それって何？」と思ったものを調べて、自分なりにまとめていきます。

今回は「ドメイン」について。なんとなく知っているつもりだったけど、いざ説明しようとすると「あれ？ちゃんと説明できない...」となったので徹底的に調べてみました！

## 目次
- [「ドメイン」って何？](#ドメインって何)
- [ドメインとURLの違い](#ドメインとurlの違い)
- [ドメイン名の種類](#ドメイン名の種類)
  - [分野別トップレベルドメイン（gTLD）](#分野別トップレベルドメインgtld)
  - [国コードトップレベルドメイン(ccTLD)](#国コードトップレベルドメインcctld)
  - [属性型JPドメイン](#属性型jpドメイン)
- [誰がドメインを管理しているの？](#誰がドメインを管理しているの)
- [どうやってドメインを取得するの？](#どうやってドメインを取得するの)
- [ドメイン廃止のリスク](#ドメイン廃止のリスク知らなかった)
- [ドメイン名が悪用されたらどうするの？](#ドメイン名が悪用されたらどうするの)
- [まとめ](#まとめ知らなかったことがいっぱい)
- [参考資料](#参考資料)

## 「ドメイン」って何？

最初は「ドメインってURLのことでしょ？」と思っていたのですが、調べてみると違いました。**ドメインとは、インターネット上の住所**なんです。IPアドレスを人間が覚えやすい形にしたもの、と言えば分かりやすいでしょうか。

## ドメインとURLの違い
- **ドメイン**：IPアドレスに紐づいている「場所」を指す（例：`example.com`）
- **URL**：ドメイン上の特定のWebページコンテンツまでの「道筋」を指す（例：`https://example.com/pages/12345`）

「住所」と「建物内の特定の部屋までの道順」くらい違うんですね！

## ドメイン名の種類



### 分野別トップレベルドメイン（gTLD）

世界中の誰でも取得可能なドメインで、有名なものだと：
- `.com`（商業組織）
- `.org`（非営利組織）
- `.net`（ネットワーク関連）

よく見る`.com`はこの分野別トップレベルドメインに該当するんですね！

### 国コードトップレベルドメイン(ccTLD)

国や地域に割り当てられたドメインで、日本の場合は`.jp`です。

#### 面白い発見！：`.ai`ドメインの話

調査していて面白い話を見つけました。カリブ海の小さな島国アンギラ（人口約16,000人）に割り当てられた国別ドメイン「.ai」が、AIブームの影響で大人気に！ChatGPT効果で登録数が1年で2倍になり、年間約43億円もの収入をもたらし、なんとその国のGDPの約10％を占めるようになったそうです。ドメインって国の経済にも影響するんですね！

### 属性型JPドメイン

日本の会社でよく見るアレです！組織の種類によって分かれています：

- `co.jp`（会社）
- `ac.jp`（大学など）
- `go.jp`（政府機関）


## 誰がドメインを管理しているの？

ドメイン名は、トップレベルドメイン（TLD）ごとに「レジストリ」という管理会社が管理していて、全体を取りまとめているのが「ICANN（アイキャン）」という国際組織だそうです。

日本の`.jp`ドメインは「日本レジストリサービス（JPRS）」が管理しています。

## どうやってドメインを取得するの？



調べてみると、私たちはレジストリに直接申請するのではなく、プロバイダーやホスティング事業者などの代理店を通じて手続きするんですね。

また、ドメイン名の登録は「先願主義（早い者勝ち）」なので、良い名前を思いついたらすぐに取得した方がいいみたいです！

## ドメイン廃止のリスク

これが一番衝撃的でした！プロジェクト終了後にドメインを廃止すると、期間を置いて第三者に取得される可能性があるんです。

廃止後は一定期間ドメインが凍結されます：
- 汎用JPドメイン名（`○○○.jp`など）：1ヶ月
- 属性型JPドメイン名（`○○○.co.jp`など）：6ヶ月

凍結期間後は誰でも取得可能になり、以下のようなリスクがあります：

1. **Webサイトとしての悪用**：以前の評価を利用して、不適切なサイトに誘導されるリスク
2. **メールアドレスとしての悪用**：なりすましメールや、アカウント乗っ取りのリスク

一度使ったドメインは簡単に廃止しない方がいいということを、先輩から聞いた理由が分かりました！

## ドメイン名が悪用されたらどうするの？

商標や商号などの権利者である会社は、紛争処理機関にドメイン名の登録取消や移転を申し立てることができるそうです。

でも、予防策としては：
- 重要なドメインは長期契約する
- 廃止予定のドメインでも一定期間はメール監視を続ける
- 重要なサービスのアカウントは、社内ドメインのメールだけでなく外部メールも登録しておく


## まとめ

「ドメイン」という言葉、聞いたことはあってもちゃんと説明できなかったけど、調べてみると奥が深くて、システム構築する際にはしっかり考慮すべき点がたくさんありました！



## 参考資料
https://www.value-domain.com/media/domain-about/

https://jprs.jp/glossary/index.php?ID=0024

https://jprs.jp/glossary/index.php?ID=0014

https://jprs.jp/about/jp-dom/spec/

https://xn--u8j7eobcu7j2kyg7f.jp/special/registrar/page_02.html

https://www.nic.ad.jp/ja/basics/terms/sengan.html

https://xn--l8je4fxbbxc7s3i7myivhl858f.xn--rhqv96g/ai-2/

https://www.youtube.com/watch?v=9rxoW377K_U&t=237s

https://webtan.impress.co.jp/e/2023/11/20/45881
【Ruby】inject(reduce)メソッドとeach_with_objectメソッド

# はじめに
`Enumerable#inject(reduce)`（たたみこみ演算）の使い方と　`Enumerable#each_with_object` との違いをまとめます。

# 基本の使い方
- 最後にブロックを実行した結果を返す
```rb
[1,2,3,4,5].inject{|result, item| result + item}
=> 15し
[1,2,3,4,5].inject(10){|result, item| result + item}
=> 25  # 初期値を10に設定
```
- 下記のようにeachを使っても同じ結果になる
```rb
result = 0
[1,2,3,4,5].each{|v| result += v}
p result
=> 15
```
# 注意点

#### ①nilの要素があるとエラーが発生する
```rb
[1,2,nil,4,5].inject{|result, item| result + item}
=> TypeError (nil can't be coerced into Integer)
```

- 対処法の一例
```rb
[1,2,nil,4,5].inject{|result, item| result + item.to_i }
=> 12
[1,2,nil,4,5].compact.inject{|result, item| result + item}
=> 12
```
#### ②初期値は上書きしない
```rb
init = [1,2]
ret =
[10,20.30.40].inject(init) do |result, item|
  result << item *2
end
p ret
[1, 2, 20, 40, 60, 80]
p init
=> [1, 2, 20, 40, 60, 80]  # 初期値も上書きされている
```
- 対処法
    - 破壊的な変更を行わない 
```rb
init = [1,2]
ret =
[10,20,30,40].inject(init) do |result, item|
  result + [item * 2]
end
p ret
=> [1, 2, 20, 40, 60, 80]
p init
=> [1, 2] #　初期値は変更されない
```

#### ③ruby-style-guldeではinjectよりもreduceを推奨
>Prefer map over collect, find over detect, select over find_all, reduce over inject, include? over member? and size over length.

https://github.com/rubocop/ruby-style-guide#map-find-select-reduce-include-size


https://zenn.dev/ebina_shohei/articles/887905eb25a1ae

# `each_with_object` との比較
- `each_with_object` の引数は書き換えられることを想定
    - `each_with_index` の引数は実行結果として返るオブジェクト
    - ブロックが実行される毎に書き換えられることを想定している
```rb
value = [1,2]
ret = [10,20,30,40].each_with_object(value){|item, result| result << item * 2 }
p ret
=> [1, 2, 20, 40, 60, 80]
p value
=> [1, 2, 20, 40, 60, 80]　# 実行結果と同じ
```
## 使い分け
- `each_with_object`
    - 引数の `｛｝` はブロックが実行される毎に書き換えられる
    - ループ処理の場合、ブロック内で次のループにオブジェクトを渡す処理を書く必要はない
【追記】※下記は`inject` メソッドと比較するための例の引用です。実際は`to_h` メソッドを使った方が良いというコメントをいただきましたので、追記します。
```rb
lower = 'a'..'z'
lower_to_upper = lower.each_with_object({}) do |char, hash|
  hash[char] = char.upcase　# ブロック内は対応づけのみで良い
end
p lower_to_upper
=> {"a"=>"A", "b"=>"B", "c"=>"C", "d"=>"D", "e"=>"E", "f"=>"F", "g"=>"G", "h"=>"H", "i"=>"I", "j"=>"J", "k"=>"K", "l"=>"L", "m"=>"M", "n"=>"N", "o"=>"O", "p"=>"P", "q"=>"Q", "r"=>"R", "s"=>"S", "t"=>"T", "u"=>"U", "v"=>"V", "w"=>"W", "x"=>"X", "y"=>"Y", "z"=>"Z"}
```
- `inject`
    - 引数の `{}` は書き換えられない
    - ループ処理の場合、ブロック内で次のループにオブジェクトを渡す処理を書く必要がある
```rb
lower = 'a'..'z'
lower_to_upper = lower.inject({}) do |hash, char|
  hash[char] = char.upcase
  hash # オブジェクトを渡す処理が必要になる
end
p lower_to_upper
=> {"a"=>"A", "b"=>"B", "c"=>"C", "d"=>"D", "e"=>"E", "f"=>"F", "g"=>"G", "h"=>"H", "i"=>"I", "j"=>"J", "k"=>"K", "l"=>"L", "m"=>"M", "n"=>"N", "o"=>"O", "p"=>"P", "q"=>"Q", "r"=>"R", "s"=>"S", "t"=>"T", "u"=>"U", "v"=>"V", "w"=>"W", "x"=>"X", "y"=>"Y", "z"=>"Z"}
```

# おわりに
`inject` と `each_with_object` ではブロック引数の順番の違いに注意して使用したいと思います。


# 参考

https://docs.ruby-lang.org/ja/latest/method/Enumerable/i/inject.html

https://docs.ruby-lang.org/ja/latest/method/Enumerable/i/each_with_object.html

https://zenn.dev/yuji_developer/articles/dec8593744bddb

https://techracho.bpsinc.jp/hachi8833/2021_04_01/58807
【Rails】ActiveRecordのpluckメソッドとRubyのmapメソッドの使い分け

# はじめに
ActiveRecordのpluckとRubyのmapをどう使い分けるのかを調べた内容をまとめます。

# 結論
- 一回の処理を行う場合はpluckを利用する方が良い＝メモリの使用量が少ない
- ループ処理を行う場合はmapを利用する方が良い＝SQLの発行は一回のみなのでパフォーマンスが低下しない

# pluck
- ActiveRecordのメソッド
```rb
Journal.pluck(:id)
```
```
# SQL
SELECT `journals`.`id` FROM `journals`
```
- `SELECT journals.id` = 特定のカラムのデータをDBから直接取得する
- ActiveRecordオブジェクトのインスタンス化は行わないため、メモリ使用量が少ない
# Array＃mapで書き換える場合
```rb
Journal.all.map(&:id)
```
```
# SQL
SELECT `journals`.* FROM `journals`
```
- `SELECT journals.*` = 全てのカラムのデータを取得し、取得したデータから特定のカラムのデータを取得する


# ループ処理の場合
- pluckはループ処理で毎回SQLを発行するためパフォーマンスが低下する
- mapはSQLの発行は一回のみ
```
journals = Journal.all
n = 100
Benchmark.bm do |x|
   x.report{n.times {journals.pluck(:id)}}
   x.report{n.times {journals.map(&:id)}}
end
       user     system      total        real
　　(1.4ms)  SELECT `journals`.`id` FROM `journals`
   (1.0ms)  SELECT `journals`.`id` FROM `journals`
   (0.8ms)  SELECT `journals`.`id` FROM `journals`
   (0.9ms)  SELECT `journals`.`id` FROM `journals`
   (0.8ms)  SELECT `journals`.`id` FROM `journals`
   (1.0ms)  SELECT `journals`.`id` FROM `journals`
   (0.7ms)  SELECT `journals`.`id` FROM `journals`
   (0.7ms)  SELECT `journals`.`id` FROM `journals`
   (0.9ms)  SELECT `journals`.`id` FROM `journals`
   (1.1ms)  SELECT `journals`.`id` FROM `journals`
   (1.0ms)  SELECT `journals`.`id` FROM `journals`
   (0.8ms)  SELECT `journals`.`id` FROM `journals`
   (0.8ms)  SELECT `journals`.`id` FROM `journals`
   (1.1ms)  SELECT `journals`.`id` FROM `journals`
     # 省略　#  SQLを100回発行
  0.098621   0.028786   0.127407 (  0.164498)
   Journal Load (1.1ms)  SELECT `journals`.* FROM `journals`
  0.005030   0.001110   0.006140 (  0.006611)
```

# 参考
https://pikawaka.com/rails/pluck

https://railsguides.jp/active_record_querying.html#pluck
より友好的な大言語モデル(LLMs)学習プロジェクトの更新です!

https://qiita.com/therealoliver/items/3e2c8c3809573246dc24

>プロジェクトリンク: GitHub - **therealoliver/Deepdive-llama3-from-scratch**: ステップバイステップでLlama3の推論を実現し、コアコンセプトを把握、プロセス導出をマスター、コードを実装。｜二言語対応コード＆ドキュメント｜コアコンセプト｜プロセス導出｜完全実装 | 完全無料!!

**説明を更新します!!:**
1. オープンソースコミュニティの貢献のおかげで、現在のプロジェクトは無料の Google Colab の上で動作し、ローカルリソースなしで学習を実行することができます。
2. また、オープンソースコミュニティの貢献のおかげで、llama-3.1、llama-3.2 やオリジナルモデルと instruct モデルのような大きなモデルを任意に選択し、1B、3B、8B などの任意のサイズのモデルを使用することができます。様々な計算可能なリソースに対応することができます。



**プロジェクトリンク: https://github.com/therealoliver/Deepdive-llama3-from-scratch**
AWSでmacOSを起動して、FlutterアプリをAppStoreへリリースしよう！

# はじめに
こんな人におすすめ！

* macOSを持っていない...
* お試しでiOSアプリを開発したい！
* FlutterアプリをGooglePlayだけでなくAppleStoreにもリリースしたい！

AWSのmacOSを使ってアプリをリリースした経験をもとに、AWSでのmacOS構築を始める方への参考になれば幸いです。

# 注意
macOSをAWSで構築すると、短時間であったとしても思いのほか料金かかってきてしまいます！
利用目的と用途を固めたうえで構築することをお勧めします。
参考記事はこちら。

https://qiita.com/developermakino/items/893fe505d5b95794c80c

# 参考

① 
EC2インスタンスでmacOSを作成する方法はこちら。
AWSのEC2でmacosの専有ホストを割り当てて、インスタンスを配置します。

https://qiita.com/yamada_yuki/items/a24a98d8a5448aafc579

②
起動したインスタンスをGUIでアクセスする方法はこちら。
RealVNC Viewerを使用してmacOSにアクセスします。

https://repost.aws/ja/knowledge-center/ec2-mac-instance-gui-access

③
flutterアプリをiOS用にビルドする方法はこちら。
リリースに必要な.ipaファイルを作成します。

https://youtu.be/iE2bpP56QKc?si=Y3Qfvfxpzyyo4f8O

# 手順
#### macOS接続まで ... 参考①,②
1. AWSへ専有ホスト利用の申請を提出
1. 専有ホストを割り当て
1. macOSのEC2インスタンスを作成（リリースするだけであれば400GBで十分）
1. インスタンスを起動
1. RealVNC ViewerでインスタンスへGUI接続

#### macOS接続後 ... 参考③
1. XCodeをダウンロード
2. GoogleChrome, VScodeをダウンロード
3. プロジェクトフォルダをGitクローン
4. flutter SDKをインストール
5. Apple DeveloperのIdentifiers でバンドル IDを発行
6. App Store ConnectでNew Appを作成
7. XCodeを開いて、RunnerのSigning & CapabilitiesにTeamとバンドル IDを入力
8. アプリアイコンを設定
9. プロジェクトフォルダからflutter build ipaを実行

:::note warn
9.でError running pod install が発生した場合の対処法
1. ios/Podfile の一番上の行に以下を追加
2. 最小バージョンを指定する
3. 再度実行
```ios/Podfile.rb
source 'https://github.com/CocoaPods/Specs.git'

platform :ios, '13.0'
```
:::

# 最後に
小規模Flutterアプリ開発の戦略として、単発でアプリをリリースするのであれば
「リリース日前にAndroidでしっかりテストしておいて、リリース日にだけmacOSを立ち上げてリリースする」
というのも現実的かと思います。
ただ、継続的にリリースするのであれば、自前のmacOSを購入することをお勧めします。

質問、随時受け付けます！
問題が起きたり行き詰まったり等あれば、お気軽にご相談ください！
DFFの代替使用としてサンプリングホールドブロックを使用


## はじめに
デジタル回路設計において、Dフリップフロップ（DFF）は一般的なデータラッチとして広く使用されています。しかし、特定のアナログ・ミックスドシグナル（AMS）回路やADコンバータのフロントエンドなどでは、DFFの代わりにサンプリングホールド（Sample and Hold, S/H）ブロックを利用することが有効です。本記事では、DFFの代わりにS/Hブロックを使用する利点、動作原理、および具体的な設計について解説します。

## DFFとサンプリングホールドブロックの違い

### Dフリップフロップ（DFF）
DFFは、クロック信号に同期して入力データをラッチし、次のクロックエッジまで保持するデジタル回路です。

- **用途**: データのレジスタ保持、同期回路、シフトレジスタなど。
- **特性**: クロックが変化するたびにデータを更新。
- **長所**: デジタル信号の正確なタイミング保持が可能。
- **短所**: アナログ信号を直接扱えない。

### サンプリングホールド（S/H）ブロック
S/Hブロックは、アナログ信号を一定時間サンプリングし、保持する回路です。

- **用途**: ADコンバータの入力、アナログ信号の時間離散化。
- **特性**: サンプリングタイミングに従ってアナログ値を保持。
- **長所**: アナログ信号の保持が可能で、AD変換やアナログ処理に適用可能。
- **短所**: 高速動作時にホールド容量のリークやチャージインジェクションの影響を受ける可能性。

## MATLAB Simulinkでの実装
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3759109/c7af996c-a73b-42ab-803f-dafd489a732a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3759109/da4864ba-62dc-45fb-bf0a-2757df08702b.png)
情報セキュリティマネジメント合格体験記

もう１年前になりますが、2024/2/12に情報セキュリティマネジメント試験を受験し合格しました。

某企業においてネットワーク（TCP/IP）レベルのセキュリティを監査する業務を行って３年目の終わりに受験したということになります。

学習には、技術評論社の「情報セキュリティマネジメント合格教本」を利用しました。
細かい知識の定義部分などが甘かったので、辞書・リファレンスとしては最適だったかなと思います。
学習期間は半年以上でしたが、ギュッとすると１か月程度だと思います。
とりあえず１冊通して読み終えるまで受けるのはやめておこうという感じでしたが、通して読み終えるのがまず大変だったので、まとまった時間で学習・復習そして受験できればいいと思います。
内容としては、ITパスポートと基本情報技術者試験の間に位置付けられているだけあって、社会人であれば一定程度備わっている情報セキュリティへのリテラシーを、専門用語とか詳しい仕組みとして紹介したものをインプットしていくような感じでしたね。ITセキュリティに関するアルバイトレベルの実務経験があれば簡単に理解できると思います。

受験はCBT方式で、IPAのWebサイトから日程と受験場所を選んで待ちます。
随時行っている試験なので気軽ですが、受験料があんまり気軽ではないので注意。

受験は11時からで予約していたのですが、前日に大学の友人の結婚式に参列し二次会三次会のうえ終電帰宅していて最悪な体調で受験することになってしまいました。
起床は９時前にできたのですが金縛りにあったように体が動かず、布団の上で寝返りを打つだけで目が回るような有様。なんとか体を起こしたものの、背骨をまっすぐにすることが一切できず、顔を上げれば吐き気も上がってくる。前日早く帰ればよかったとめちゃくちゃ後悔しました。
家から出て風にあたっても、電車に乗っても、駅についてリンゴジュースをがぶ飲みしても、試験会場についても吐き気は止まらず、試験直前までトイレにいました。

いざ試験が始まっても変わらず、試験センターの照明が明るすぎることで体調が悪くなりそうなほどでした。
ディスプレイに表示されている文字の光を見つめることもかなわず。机に突っ伏して見上げるような形で光が直接目に入らないようにするか、一瞬だけその光を目に入れて閉じ、文章を網膜に焼き付けて選択肢を選ぶ。。という形で、もうとにかく早く終わらせることだけを考えて進めました。
とはいえ後半は現実的なシチュエーションの中でどうやって対応するか？という問題で、問題文も長ければ選択肢の文章も長い、しかも多い。ほとんど勘で選択肢をカチカチやっていって、そしてすべての回答を終えました。冷や汗と後悔と早く帰りたいという気持ち。

いちおう、最後に採点結果が出ますよね。1000点中600点が合格ラインとは聞いていましたが、そのとき表示された点数は　605点。　実に、実にギリギリです。その日の受験者のレベルによってはラインが上下するらしいとも聞いていたので、ほとんど落ちたと思っていましたが、IPAのサイトで合格の２文字を確認し、認定証が家に届くまで全く合格だと実感できませんでした。

結論、実務経験を血肉にしていれば体調がグロッキーでも受かります。

長文駄文をお読みいただきありがとうございました。