OmniAICreator/Qiita-1.07M huggingface dataset:
Issues Publish Tableau to CRMA



# Unable to publish, try again


+ [Issues Publish Tableau to CRMA](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000MXP0p0AH)

OAuth set up後のエラー

--------------

+ [【ヘルプ】OAuth 使用時にデータ ソースに対して "エラー: localhost で OAuth サーバーに接続できません" または "エラー コード: 84223ADA" が発生する](https://help.salesforce.com/s/articleView?id=001471406&type=1)

+ [Tableau サーバーに公開できません。](https://community.tableau.com/s/question/0D5cw000002XCNwCAO/unable-to-publish-to-tableau-server)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/3afd6f81-0228-9bf0-157f-d8c5af27440d.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/fcf60eba-2202-9f37-95d3-ec0078c4fea6.png)


+ [Tableau Cloud から Salesforce にパブリッシュできません - 「アプリを取得できません。このウィンドウを閉じてもう一度お試しください」](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007aiIRFSA2)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/e44022dc-b9fb-ba23-2a18-86b733161c03.png)
通貨設定の問題


UIでも問題があったけど、LWCでも同じみたい

+ [フィールドがグレイアウトして中身が表示されない](https://qiita.com/Keiji_otsubo/items/8c78daa14371bcb0e152)


# Error in $A.getCallback() [panelService#_preparePanelBodyDesktop() - Component creation failed for: forceChatter:updatePhoto, Error during LWC component connect phase: [Invalid currency code : ]] {anonymous}()

+ [Error while updating photo in chatter profile](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000KD3lX)

:::note
You could fix this issue changing the "Currency Locale" option, by default was "spanish - null" in my case 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/740e6f8b-4cf9-2e28-455e-87cbfbd6d56e.png)

https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007T47RGSAZ
:::
PHPで「文字列の出力に使用するechoとprintの違い」の動作を確認してみた。

# 概要

PHPで「文字列の出力に使用するechoとprintの違い」の動作を確認してみました。
以下のページを参考にしました。

https://www.javadrive.jp/php/string/index3.html

# 実装

以下のファイルを作成しました。

```sample.php
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>PHPテスト</title>
</head>
<body>

<p>
<?php
$pref = "東京都";
echo $pref, "港区" ,"<br>";
print "こんにちは"
?>
</p>

</body>
</html>
```

以下のコマンドを実行しました。

```
$ php sample.php 
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>PHPテスト</title>
</head>
<body>

<p>
東京都港区<br>こんにちは</p>

</body>
</html>
```

# まとめ

何かの役に立てばと。
dSYMの自動アップロードコマンドの修正


下の記事のコマンドを修正する必要がある
https://zenn.dev/yuki_2021/articles/9a755a747b04eb

ここでの議論を参考にした
https://stackoverflow.com/questions/55709939/how-to-upload-dsyms-files-which-developed-with-flutter

firebaseのアプリIDは左上の設定アイコン＞プロジェクトの設定＞マイアプリの(ios)を選択してアプリIDとなっているところの文字列```2:2334343:ios:342dear443```みたいな感じのやつ。（数字の文字数は正確ではない）
```
"${PODS_ROOT}/FirebaseCrashlytics/run"　-ai 【firebaseのアプリID】
```
```
"${PODS_ROOT}/FirebaseCrashlytics/upload-symbols" -ai 【firebaseのアプリID】 -p ios "${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}"
```
【Laravel11.x】Middlewareの設定方法が変わったようなのでおさらい

お疲れ様です。

larave11の環境で個人制作を始めたところ、Middleware（ミドルウェア）の設定方法が色々変わっていて驚いたので、備忘録として書き留めておこうと思います。

Middleware って何？という場合はまずこちらを。

https://qiita.com/tatsuya_1995/items/ad166e9bc7ee3969f1fc

以下はlaravel11のプロジェクトスタート時のファイル構成の一部ですが、
```
├── README.md
├── app
│   ├── Http
│   │   └── Controllers
│   ├── Models
│   │   └── User.php
│   └── Providers
│       └── AppServiceProvider.php
├── artisan
├── bootstrap
│   ├── app.php
│   ├── cache
│   │   ├── events.php
│   │   └── ...
│   └── providers.php
├── ...
```
10までのバージョンには `app/Http` 配下にあった `Middleware` ディレクトリや、その設定を管理する`Kernel.php` が見当たりません。

では、Middlewareの登録や設定をどこで行うかというと、`bootstrap/app.php` というファイルの中にその場所が確保されているのです。

```php:bootstrap/app.php
<?php

use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;

return Application::configure(basePath: dirname(__DIR__))
    ->withRouting(
        web: __DIR__.'/../routes/web.php',
        commands: __DIR__.'/../routes/console.php',
        health: '/up',
    )
    ->withMiddleware(function (Middleware $middleware) {
        //
    })
    ->withExceptions(function (Exceptions $exceptions) {
        //
    })->create();
```

上記の `withMiddleware` クロージャ内に、コントローラの実行前後に行いたい処理を追加していきます。

例えばいくつかの Middleware を作成するとします。
```zsh
% php artisan make:middleware FirstMiddleware
```

この順番を制御したい場合、以下のように記載することができます。
```php:bootstrap/app.php
    ->withMiddleware(function (Middleware $middleware) {
        // 最初に実行する処理
        $middleware->prepend(FirstMiddleware::class);
        // 順次実行する処理
        $middleware->append(SecondMiddleware::class);
        $middleware->append(ThirdMiddleware::class);
        // 最後に実行する処理
        $middleware->append(LastMiddleware::class);
    })
```
`prepend()` は処理の先頭に追加され、`append()` は処理の末尾に追加されますので、上記は `First→Secound→Third→Last` の順に実行されることとなります。

また、10以前のMiddleware同様に、web/apiに合わせた処理のグループ化も可能です。
この場合、以下のようにグローバルと別にグループを作成します。

```php:bootstrap/app.php
    ->withMiddleware(function (Middleware $middleware) {
        // グローバルミドルウェア（全ルートで実行）
        $middleware->prepend(FirstExecuteMiddleware::class);
        $middleware->append(LastExecuteMiddleware::class);

        // Webルート用のミドルウェア
        $middleware->web(append: [
            WebSecondMiddleware::class,
            WebThirdMiddleware::class,
        ]);

        // APIルート用のミドルウェア
        $middleware->api(append: [
            ApiSecondMiddleware::class,
            ApiThirdMiddleware::class,
        ]);
    })
```
また、実務上はエイリアスを指定しルーティングに割り当てるシーンが多いかと思いますが、こちらは以下のように登録します。
```php:bootstrap/app.php
use App\Http\Middleware\AddFunction;

->withMiddleware(function (Middleware $middleware) {
    $middleware->alias([
        'add_function' => AddFunction::class
    ]);
})
```

```php:route/web.php
Route::get('/hoge', function () {
    // ...
})->middleware('add_function');
```
仕様の変更によってキャッチアップは必要ですが、実行順序が prepend/append で明示的なのと、10以前の配列定義に比べメソッドチェーンによる記述が直感的であるため、新規の方にはスッキリ分かりやすい作りになったかなという印象です。

その他詳細な設定は公式をご確認ください。

https://laravel.com/docs/11.x/releases#middleware

https://readouble.com/laravel/11.x/ja/middleware.html
PineScriptとR言語の比較



## 概要  
本記事では、TradingViewの[PineScript](https://www.tradingview.com/pine-script-reference/v6/?aff_id=112991&source=qt0a-tradingview)と、統計解析・データサイエンスで広く使用されるR言語を比較する。両者は用途やアプローチが異なるが、それぞれに特有の利点がある。本記事を通じて、両者の特徴と適切な使い方について理解を深めることができるだろう。

https://www.tradingview.com/pine-script-reference/v6/?aff_id=112991&source=qt0a-tradingview

## 対象読者  
本記事は以下のような方々に向けて記述している。  
- TradingViewやPineScriptを使用したトレードに興味がある方  
- R言語に関する知識を有し、システムトレードやアルゴリズム取引に活用したい方  
- プログラミング言語間の比較を通じて、より効果的なツール選定を行いたい方  

---

## PineScriptの概要  
PineScriptは、TradingViewでのチャート作成とインディケーター、ストラテジーの開発に特化したスクリプト言語である。金融市場におけるテクニカル分析を行うためのツールを迅速に作成でき、主に以下の特徴が挙げられる。

### 特徴
1. **簡単な文法**  
   PineScriptは、金融市場におけるチャート分析を簡便に行うために設計されている。短いコードで移動平均線やRSIなどのインディケーターを表示できる。
   
2. **リアルタイムのデータ処理**  
   TradingViewにおけるリアルタイムデータを直接扱うことができる。リアルタイムで条件に一致するシグナルをトリガーしたり、アラートを発することが可能である。

3. **限られた用途**  
   PineScriptは主にテクニカル分析に特化しているため、データ解析や高度な統計処理には不向きである。データの取り扱いや前処理の能力は制限されている。

---

## R言語の概要  
R言語は、統計解析やデータサイエンスに特化したプログラミング言語であり、データの可視化や複雑な統計モデリングを容易に行うことができる。金融市場においてもアルゴリズム取引やポートフォリオ管理など、幅広い分野で使用されている。

### 特徴
1. **豊富なパッケージ**  
   Rは膨大な数のパッケージを持ち、統計解析や機械学習、時系列解析に関する多くのツールが提供されている。これにより、金融市場での多様な解析を行うことが可能である。

2. **柔軟なデータ処理**  
   データフレームを活用した柔軟なデータ処理が可能で、異なる形式のデータを簡単に統合し、解析を行うことができる。大量のデータを効率的に扱うためのライブラリ（例えば`data.table`や`dplyr`）も充実している。

3. **高度な統計モデリング**  
   Rは高度な統計解析や回帰分析、時系列予測のためのツールが豊富で、データを深く掘り下げた分析を行うことができる。

---

## PineScriptとR言語の比較

### 1. **使用目的と特化性**  
PineScriptは主にチャート作成やテクニカル分析を目的としたスクリプト言語であり、TradingViewプラットフォーム内で直接使用される。一方、R言語は汎用的なデータ解析や統計解析のツールであり、トレードアルゴリズムの開発においても柔軟に活用できる。  

### 2. **学習コスト**  
PineScriptはシンプルな構文と直感的な設計が特徴であり、テクニカル分析に必要な機能を手軽に実装できる。これに対し、R言語は多くのライブラリと関数があり、最初は学習曲線が急である。特に、統計解析や複雑なアルゴリズムを実装する際には深い理解が求められる。  

### 3. **データ取り扱い能力**  
PineScriptはリアルタイムデータに特化しているが、過去のデータや他のデータソースの取り扱いには限界がある。R言語は大量のデータセットを扱うのに適しており、データの前処理、クレンジング、変換などが容易に行える。

### 4. **アルゴリズムトレードへの応用**  
PineScriptは主にインディケーターやシンプルな戦略の実装に適しており、バックテスト機能を使用してシグナルを生成する。R言語は、より複雑なアルゴリズム取引システムの開発に適しており、ポートフォリオ最適化や機械学習を用いたトレーディングアルゴリズムの構築にも対応している。

---

## どちらを選ぶべきか？  
選択は、トレードにおける目的や必要とする機能に依存する。以下の点を参考にして選択を行うとよいだろう。

- **PineScriptを選ぶべき場合**  
  - シンプルで迅速なテクニカル分析やインディケーターの作成が求められる場合  
  - TradingViewのプラットフォーム内で直接シグナルを生成したい場合  
  - シンプルなアルゴリズムをテスト・実行したい場合  

- **R言語を選ぶべき場合**  
  - 複雑なデータ分析や高度な統計モデリングを行いたい場合  
  - 大量の過去データや他のデータソースを活用したい場合  
  - 複雑なアルゴリズム取引システムを開発したい場合  

---

## 結論  
PineScriptとR言語は、それぞれ異なる特徴と強みを持つプログラミング言語である。PineScriptは主にリアルタイムのチャート分析に特化しており、簡便にテクニカルインディケーターやアラート機能を実装できる。一方、R言語は柔軟で強力なデータ分析ツールを提供し、システムトレードやアルゴリズム開発の幅広いニーズに対応可能である。どちらを選ぶかは、目的や求められる機能に応じて決定すべきである。

---

APIドキュメント：

https://www.tradingview.com/pine-script-reference/v6/?aff_id=112991&source=qt0a-tradingview

---

## 免責事項  

本記事に記載されている内容は、筆者がTradingViewおよびPineScriptを用いて学び得た知識と経験を基に執筆したものである。内容の正確性および完全性については可能な限り配慮しているが、必ずしもその保証をするものではない。  

自動売買Botの構築や運用、またそれに関連する投資活動は読者自身の判断と責任に基づいて行われるべきであり、筆者および本記事を掲載するプラットフォーム（Qiita）は、それによって生じたいかなる損失や損害に対しても一切の責任を負わないものとする。  

特に、トレードに関する意思決定は市場リスクを伴うため、実運用前に十分な検証とリスク評価を行い、必要に応じて専門家への相談を推奨する。  

読者各位の責任において本記事をご活用いただければ幸いである。
PineScriptでオンチェーンデータを扱う方法


## 概要  
本記事では、TradingViewの[PineScript](https://www.tradingview.com/pine-script-reference/v6/?aff_id=112991&source=qt0d-tradingview)を用いてオンチェーンデータを扱う方法について解説する。オンチェーンデータとは、ブロックチェーン上で生成・記録されたデータのことであり、暗号資産（仮想通貨）のファンダメンタル分析に役立つ情報を提供するものである。  
TradingViewは主に価格チャートの可視化に適しているが、適切な外部データを取り込むことで、オンチェーンデータを活用した分析も可能となる。この記事では、その実現手法と注意点について述べるものである。  

https://www.tradingview.com/pine-script-reference/v6/?aff_id=112991&source=qt0d-tradingview

---

## オンチェーンデータとは  
オンチェーンデータは、ブロックチェーンに記録された取引やウォレットアクティビティなどのデータを指す。例えば以下のようなデータが挙げられる。  
- アクティブアドレス数  
- トランザクション数  
- マイニングハッシュレート  
- トランザクション手数料の推移  

これらのデータは、特定の暗号資産のネットワークアクティビティや需要動向を把握するための重要な手がかりとなる。  

---

## PineScriptでオンチェーンデータを扱う仕組み  
PineScript自体は、オンチェーンデータを直接取得する機能を持たない。したがって、外部データソースを利用し、それをTradingViewにインポートする形で対応する必要がある。その一般的な方法としては、以下のような手段が挙げられる。  

1. **外部APIを利用したデータ取得**  
   ブロックチェーン関連のAPI（例: Glassnode、CryptoQuant、Messariなど）を使用してオンチェーンデータを取得し、そのデータをCSVやJSON形式で保存する。  

2. **TradingViewのデータシート機能を活用**  
   TradingViewの「スプレッドシート機能」を利用して、外部データをアップロードし、PineScriptで参照する。  

---

## 実装例：CSVデータを利用したオンチェーンデータの表示  

以下は、外部データをインポートし、PineScriptで可視化する手法の概要である。  

### 1. データの準備  
外部APIからオンチェーンデータを取得し、CSVファイルとして保存する。例として、以下のような形式を想定する。  

```
Date, ActiveAddresses
2023-01-01, 123456
2023-01-02, 124000
2023-01-03, 126500
```

### 2. データのインポートとスクリプトの作成  
CSVデータをTradingViewにアップロードし、以下のスクリプトを使用してデータをチャートにプロットする。  

```pinescript
//@version=5
indicator("On-Chain Data Visualization", overlay=false)

// CSVからデータを読み込む
active_addresses = request.security("EXCHANGE:SYMBOL", "D", close)

// データをプロット
plot(active_addresses, color=color.blue, title="Active Addresses")
```

---

## 注意点  
### 1. データの正確性  
オンチェーンデータは、データソースの信頼性に依存する。取得するデータが正確であることを確認した上で使用すべきである。信頼性の低いデータは誤った結論を導く原因となりうる。  

### 2. データ更新のタイミング  
オンチェーンデータはリアルタイム性を重視する場合があるが、外部データの更新頻度によって分析結果に遅延が生じることがある。この点を考慮した運用が求められる。  

### 3. API使用時の制約  
外部APIを利用する場合、無料プランにはレートリミットや機能制限が存在することが多い。有料プランを使用する必要がある場合は、コストとのバランスを慎重に検討すべきである。  

---

## 結論  
PineScriptを用いてオンチェーンデータを扱うことで、トレードのファンダメンタル分析に深みを与えることが可能である。本記事で述べた手法を参考に、TradingViewを活用した高度な分析環境を構築していただきたい。  
引き続き、システムトレードやアルゴリズムプログラミングに関する知見を共有していく所存である。  

読者の皆様の成功を心より願っている。  

---

APIドキュメント：

https://www.tradingview.com/pine-script-reference/v6/?aff_id=112991&source=qt0-tradingview

---

## 免責事項  

本記事に記載されている内容は、筆者がTradingViewおよびPineScriptを用いて学び得た知識と経験を基に執筆したものである。内容の正確性および完全性については可能な限り配慮しているが、必ずしもその保証をするものではない。  

自動売買Botの構築や運用、またそれに関連する投資活動は読者自身の判断と責任に基づいて行われるべきであり、筆者および本記事を掲載するプラットフォーム（Qiita）は、それによって生じたいかなる損失や損害に対しても一切の責任を負わないものとする。  

特に、トレードに関する意思決定は市場リスクを伴うため、実運用前に十分な検証とリスク評価を行い、必要に応じて専門家への相談を推奨する。  

読者各位の責任において本記事をご活用いただければ幸いである。
PineScriptで住宅価格指数（JPHPI）を分析して将来予測



## 概要  
本記事では、TradingViewの[PineScript](https://www.tradingview.com/pine-script-reference/v6/?aff_id=112991&source=qt0e-tradingview)を用いて日本の住宅価格指数（JPHPI: Japan Housing Price Index）のデータを分析し、将来予測モデルを作成する方法について解説する。住宅市場の動向を捉えるための技術的手法を示すとともに、モデル作成における注意点や限界についても言及する。読者の方々が不動産市場の分析や投資判断に役立てることを目指す。  

https://www.tradingview.com/pine-script-reference/v6/?aff_id=112991&source=qt0e-tradingview

## 対象読者  
本記事は以下の方々を対象としている。  
- PineScriptを用いたデータ分析に興味がある方  
- 不動産市場の動向分析や予測に関心がある方  
- システムトレードの枠組みを不動産分野に応用したい方  

---

## JPHPIデータの概要  
JPHPI（Japan Housing Price Index）は、日本国内の住宅価格の変動を指数化した指標であり、不動産市場の動向を把握するための重要なデータである。本指数は、住宅市場の全体的な価格トレンドを示すものであり、経済情勢や金融政策の影響を反映する。  

TradingViewでは、JPHPIを取り扱うデータソースが限られているため、手動でデータをCSV形式でインポートし、それをPineScript内で利用する形が一般的である。  

---

## PineScriptを用いたJPHPIの分析

### 1. データの準備  
JPHPIデータは手動で取得し、必要に応じて標準化することが望ましい。TradingViewの`input.source()`を活用し、手動入力の値を簡易的に再現する方法を以下に示す。  

```pinescript
//@version=5
indicator("JPHPI Analysis", shorttitle="JPHPI", overlay=false)

// JPHPIデータを手動入力
jphpi = input.float_array([120.5, 121.2, 122.0, 122.8, 123.5, 124.3], title="JPHPI Data")

// データのプロット
index = array.from(1, array.size(jphpi)) // インデックス作成
plot(series=array.get(jphpi, bar_index), color=color.blue, title="JPHPI")
```

上記のコードでは、手動でJPHPIデータを配列として入力し、それを時系列プロットしている。  

### 2. 移動平均によるトレンド分析  
JPHPIのトレンドを把握するために、移動平均を用いる方法を示す。以下は単純移動平均（SMA）の例である。  

```pinescript
// 移動平均の計算
sma_period = input.int(3, title="SMA Period")
sma = ta.sma(array.get(jphpi, bar_index), sma_period)

// 移動平均のプロット
plot(series=sma, color=color.red, title="SMA")
```

短期移動平均を設定することで、住宅価格の短期的な変動傾向を視覚化可能である。  

### 3. 将来予測モデルの構築  
次に、単純回帰モデルを用いた予測値の算出を行う。以下は回帰直線を用いた基本的なアプローチの例である。  

```pinescript
// 回帰モデルによる予測
future_periods = input.int(5, title="Forecast Periods")
slope = ta.linreg(array.get(jphpi, bar_index), array.from(1, array.size(jphpi)), future_periods)

// 予測値の計算
forecast = array.new_float(future_periods)
for i = 0 to future_periods - 1
    array.set(forecast, i, slope * (array.size(jphpi) + i))

// 予測値のプロット
plot(series=array.get(forecast, bar_index), color=color.green, title="Forecast")
```

---

## 注意点  

### 1. データの正確性  
JPHPIデータは政府統計や信頼できる機関から取得することが必須である。不正確なデータに基づく分析は誤解を招くリスクを伴う。  

### 2. モデルの単純化  
本記事で提示した手法は、学術的な経済モデルと比較すると簡略化されたものである。したがって、複雑な経済要因を無視している点に留意されたい。  

### 3. PineScriptの制約  
PineScriptはリアルタイム分析には強力であるが、膨大なデータや高度な統計モデルには適さない場合がある。必要に応じて外部ツール（PythonやRなど）との併用を検討されたい。  

---

## 結論  
PineScriptを用いたJPHPIの分析は、不動産市場のトレンドを理解するための基礎的なツールとなり得る。本記事で示したコードを活用し、自身の投資判断や市場分析に応用していただきたい。また、分析結果を利用する際は、データの信頼性やモデルの限界を常に意識することが重要である。  

本記事が読者の皆様の参考となれば幸いである。

---

APIドキュメント：

https://www.tradingview.com/pine-script-reference/v6/?aff_id=112991&source=qt0-tradingview

---

## 免責事項  

本記事に記載されている内容は、筆者がTradingViewおよびPineScriptを用いて学び得た知識と経験を基に執筆したものである。内容の正確性および完全性については可能な限り配慮しているが、必ずしもその保証をするものではない。  

自動売買Botの構築や運用、またそれに関連する投資活動は読者自身の判断と責任に基づいて行われるべきであり、筆者および本記事を掲載するプラットフォーム（Qiita）は、それによって生じたいかなる損失や損害に対しても一切の責任を負わないものとする。  

特に、トレードに関する意思決定は市場リスクを伴うため、実運用前に十分な検証とリスク評価を行い、必要に応じて専門家への相談を推奨する。  

読者各位の責任において本記事をご活用いただければ幸いである。
PineScriptで各国の金利をチャートしてテクニカル分析を行う  



## 概要  
本記事では、TradingViewにおける[PineScript](https://www.tradingview.com/pine-script-reference/v6/?aff_id=112991&source=qt0f-tradingview)を用いて各国の金利データをチャート化し、テクニカル分析を行う方法について解説する。特に、金利データを視覚的に分析することが、為替市場や債券市場における取引戦略の構築にどのように役立つかを示すことを目的とする。  

https://www.tradingview.com/pine-script-reference/v6/?aff_id=112991&source=qt0f-tradingview

PineScriptのシンプルさとTradingViewのグローバルデータアクセス機能を組み合わせることで、効率的な市場分析環境を構築する手法を提示する。  

## 対象読者  
以下のような方々に向けて、本記事を執筆した。  
- 金利データに基づくトレード戦略を考案したい方  
- 為替市場や債券市場におけるテクニカル分析に興味を持つ方  
- PineScriptを活用したデータの可視化手法を学びたい方  

---

## 金利データの重要性  
各国の金利（政策金利や国債利回りなど）は、為替市場や債券市場の動向に大きな影響を与える要因である。例えば、金利差は為替レートの動きに直結し、金利スプレッドを基にしたトレード戦略（キャリートレード等）は、長年にわたり市場参加者に重視されてきた。  

PineScriptを用いることで、これらのデータを簡単にチャートに反映し、視覚的な洞察を得ることが可能である。  

---

## 実装手順  

### 1. 金利データの取得  
TradingViewでは、多くの国の金利データがティッカーシンボルとして提供されている。例えば、米国10年債利回りは`US10Y`、日本10年債利回りは`JP10Y`である。これらのシンボルをPineScriptで参照することで、金利データをチャート上に表示することが可能となる。  

---

### 2. PineScriptコードの作成  

以下は、米国10年債利回りと日本10年債利回りをプロットし、金利スプレッドを計算・表示するスクリプトの例である。  

```pinescript
//@version=5
indicator("Interest Rate Analysis", shorttitle="IR Analysis", overlay=false)

// 各国金利データの取得
us10y = request.security("US10Y", "D", close)
jp10y = request.security("JP10Y", "D", close)

// 金利スプレッドの計算
spread = us10y - jp10y

// プロット
plot(us10y, color=color.blue, title="US 10Y Yield")
plot(jp10y, color=color.red, title="JP 10Y Yield")
plot(spread, color=color.green, title="Spread (US - JP)")

// 水平ラインを引いてスプレッドの閾値を示す
hline(0, "Zero Line", color=color.gray)
hline(1, "Positive Threshold", color=color.green, linestyle=hline.style_dotted)
hline(-1, "Negative Threshold", color=color.red, linestyle=hline.style_dotted)
```  

---

### 3. テクニカル分析への応用  
金利データをチャートに表示することで、以下のような分析が可能である。  

1. **トレンド分析**  
   米国および日本の金利動向を比較し、それぞれのトレンドが示唆する市場の方向性を判断する。  

2. **スプレッドのブレイクアウト戦略**  
   金利スプレッドが特定の閾値を超えた場合、為替市場においてボラティリティが高まる可能性がある。このタイミングをトレードシグナルとして活用することが考えられる。  

3. **市場センチメントの把握**  
   各国金利の変化は、中央銀行の政策変更や市場参加者の期待を反映する。金利の急激な変動は、重要なファンダメンタルズイベントを示唆する場合がある。  

---

## 注意点  

### 1. データの更新頻度  
TradingViewにおける金利データは、取引時間外に更新されない場合がある。そのため、特定のタイムフレームでは適時性を欠く可能性がある点に留意すべきである。  

### 2. リアルタイム性の限界  
TradingViewのデータソースは一般に遅延が生じる場合があるため、高頻度取引を行う際には別途リアルタイムデータを取得する仕組みを検討する必要がある。  

### 3. ファンダメンタル分析との併用  
金利データはテクニカル分析だけでなく、ファンダメンタル分析と併用することでより有効に活用できる。各国の政策発表や経済指標にも注意を払うべきである。  

---

## 結論  
PineScriptを用いて各国の金利データを視覚化し、テクニカル分析を行うことは、為替市場や債券市場におけるトレード戦略構築の強力なツールとなり得る。本記事で紹介したスクリプトを活用し、さらなる分析を試みていただければ幸いである。  

読者各位の市場分析がより一層深まることを願っている。

---

APIドキュメント：

https://www.tradingview.com/pine-script-reference/v6/?aff_id=112991&source=qt0-tradingview

---

## 免責事項  

本記事に記載されている内容は、筆者がTradingViewおよびPineScriptを用いて学び得た知識と経験を基に執筆したものである。内容の正確性および完全性については可能な限り配慮しているが、必ずしもその保証をするものではない。  

自動売買Botの構築や運用、またそれに関連する投資活動は読者自身の判断と責任に基づいて行われるべきであり、筆者および本記事を掲載するプラットフォーム（Qiita）は、それによって生じたいかなる損失や損害に対しても一切の責任を負わないものとする。  

特に、トレードに関する意思決定は市場リスクを伴うため、実運用前に十分な検証とリスク評価を行い、必要に応じて専門家への相談を推奨する。  

読者各位の責任において本記事をご活用いただければ幸いである。
PineScriptで経済指標（ファンダメンタルズ指標）を活用した定量分析 



## 概要  
本記事では、TradingViewにおける[PineScript](https://www.tradingview.com/pine-script-reference/v6/?aff_id=112991&source=qt0g-tradingview)を活用し、経済指標（ファンダメンタルズ指標）を基にした定量的な分析手法について解説する。具体的には、消費者物価指数（CPI）などのデータを用いてテクニカル分析を行う方法を示し、それをトレード戦略に組み込む際の留意点についても言及する。  

https://www.tradingview.com/pine-script-reference/v6/?aff_id=112991&source=qt0g-tradingview

TradingViewでは一部のファンダメンタルズ指標が提供されており、それらを組み合わせることで、テクニカル指標だけでは見えにくい市場の動向を把握する助けとなるであろう。  

## 対象読者  
本記事は以下のような方を対象としている。  
- ファンダメンタルズ分析に興味があるが、定量化に課題を感じている方  
- PineScriptを用いて複雑なトレード戦略を構築したい方  
- 経済指標をトレードの意思決定に活用したい方  

---

## ファンダメンタルズ指標を用いた分析の重要性  
市場価格は、多くの場合、経済指標や政策金利といったファンダメンタルズ指標に影響を受ける。これらの指標をPineScriptに組み込むことにより、トレード戦略の多角的な視点を構築できる。特に、CPIはインフレーションの動向を示す主要な指標であり、中央銀行の金融政策に強く影響を与えるため、注目すべきである。  

### CPIを活用するメリット  
- **マクロ経済のトレンド把握**: CPIの上昇は一般的にインフレ圧力を示し、金利上昇を招く可能性がある。これにより、特定の資産クラス（株式、債券、通貨など）が影響を受ける。  
- **市場センチメントの補完**: テクニカル指標に加えてCPIを考慮することで、市場のセンチメント変化をより深く理解できる。  

---

## 実装手順  

### 1. 必要なデータの取得  
TradingViewでは一部のファンダメンタルズ指標が`request.fundamentals()`関数で取得可能である。以下は仮想的な例を示す。  

```pinescript
//@version=5
indicator("CPI-Based Strategy", shorttitle="CPI Strat", overlay=true)

// 仮想的なCPIデータ取得（データ提供がある場合に限る）
cpi_value = request.fundamentals("CPI")

// CPIの閾値を設定
high_cpi_threshold = 2.0
low_cpi_threshold = 0.5

// CPIの状態を判定
is_high_cpi = cpi_value > high_cpi_threshold
is_low_cpi = cpi_value < low_cpi_threshold

// チャートへの描画
bgcolor(is_high_cpi ? color.new(color.red, 90) : na, title="High CPI Zone")
bgcolor(is_low_cpi ? color.new(color.green, 90) : na, title="Low CPI Zone")

// テクニカル指標との組み合わせ
sma10 = ta.sma(close, 10)
plot(sma10, color=color.blue, title="SMA 10")

alertcondition(is_high_cpi, title="High CPI Alert", message="CPI exceeds threshold")
alertcondition(is_low_cpi, title="Low CPI Alert", message="CPI below threshold")
```  

上記コードはCPI値を基に市場状態を可視化し、テクニカル指標（移動平均線）と組み合わせた例である。ただし、CPIデータがTradingViewのサポート対象外である場合には、手動で外部データを統合する必要があるであろう。  

---

### 2. データの外部統合  
TradingViewでは外部データを直接読み込むことはできないため、Webhooksを用いて他のデータ提供プラットフォームと連携することが推奨される。例えば、PythonやExcelを活用して定期的にCPIデータを更新し、それをTradingViewのアラートと連携する形で運用するのが一般的である。  

---

## 注意点  

### 1. データの正確性と遅延  
ファンダメンタルズ指標は、発表直後に市場に大きな影響を与えることが多いため、データの正確性とタイムリーな取得が極めて重要である。遅延や誤差がトレード結果に直接影響を及ぼす可能性がある点に留意されたい。  

### 2. 過剰な依存を避ける  
ファンダメンタルズ指標は、単体では十分な意思決定ツールとはならない場合がある。テクニカル指標とのバランスを取ることが重要であり、複数の分析手法を併用することが望ましい。  

### 3. バックテストの限界  
TradingViewでのバックテストにおいて、ファンダメンタルズ指標が過去データとして存在しない場合、適切な検証が困難である。そのため、事前に可能な範囲で外部データを統合し、精度を確認することが推奨される。  

---

## 結論  
PineScriptでファンダメンタルズ指標を活用することにより、トレード戦略を多角的かつ精度の高いものにする可能性が広がる。本記事で提示したCPIを例とする手法や留意点を参考に、読者の皆様がより洗練されたトレード環境を構築されることを願っている。  

TradingViewの機能を駆使しつつ、定量分析の幅を広げる一助となれば幸いである。

---

APIドキュメント：

https://www.tradingview.com/pine-script-reference/v6/?aff_id=112991&source=qt0g-tradingview

---

## 免責事項  

本記事に記載されている内容は、筆者がTradingViewおよびPineScriptを用いて学び得た知識と経験を基に執筆したものである。内容の正確性および完全性については可能な限り配慮しているが、必ずしもその保証をするものではない。  

自動売買Botの構築や運用、またそれに関連する投資活動は読者自身の判断と責任に基づいて行われるべきであり、筆者および本記事を掲載するプラットフォーム（Qiita）は、それによって生じたいかなる損失や損害に対しても一切の責任を負わないものとする。  

特に、トレードに関する意思決定は市場リスクを伴うため、実運用前に十分な検証とリスク評価を行い、必要に応じて専門家への相談を推奨する。  

読者各位の責任において本記事をご活用いただければ幸いである。
良いコード／悪いコードで学ぶ設計入門 第５章

# 第5章 低凝集 ─バラバラになったモノたち─

## 凝集度とは
凝集度とは、モジュール内におけるデータとロジックの関係性の強さを表す指標である。  
本章では、モジュールの粒度を「クラス」とし、高凝集な設計を目指す。  

- **高凝集**：変更に強い
- **低凝集**：壊れやすく、変更が困難

## 5.1 staticメソッドの誤用
### 問題点
- static メソッドとデータクラスがセットで登場しがち
    - データのみを持つクラスと、処理のみをするクラスに分かれる
- static をつけていないだけのインスタンス変数にも注意
    - とりあえず static をつけてエラーが出るかどうかで static メソッドか判断可能
- static メソッドは低凝集になりやすい

### 解決策
- インスタンス変数とその変数を用いるロジックを同じクラスに実装する
- static はログ出力やフォーマット変換など、凝集度に無関係なものに限定する

---

## 5.2 初期化ロジックの分散
### 問題点
- コンストラクタを公開すると初期化メソッドが分散しがち

### 解決策
- **private constructor** + **factory method** で目的別に初期化する
- 生成ロジックが増えすぎた場合は factory class を検討する

---

## 5.3 共通処理クラス（Common・Util）
### 問題点
- common や util クラスは static の問題を抱える
    - static の使用で低凝集構造になる
    - グローバル変数が出現しやすくなる
    - 無関係な共通処理が雑多に置かれる

### 解決策
- 安易に共通処理クラスを作らず、Value Object を活用する
- 横断的関心事（ログ出力・例外処理など）は共通処理としてまとめても良い

---

## 5.4 結果を返すために引数を使わない
### 問題点
- 出力引数を使用すると、入力か出力か判別が難しくなる
- メソッド内部のロジックを確認しないと動作を理解できない

### 解決策
- 出力引数は極力使わない
- **複数の値を返したい場合は Value Object を作成する**

---

## 5.5 多すぎる引数
### 問題点
- 引数が増えると、処理が肥大化し、低凝集につながる
- **プリミティブ型執着**：プリミティブ型を乱用すると重複コードや無秩序なロジックが生まれる

### 解決策
- クラスの量産を恐れず、**概念的に意味のあるクラス（Value Object）を作る**
- **引数を持つデータは、適切なクラスにまとめる**

---

## 5.6 メソッドチェイン
### 問題点
- クラスの奥深い要素にアクセスしやすくなる
- 仕様変更やバグの影響を調べる範囲が広がる

### 解決策
- **インスタンス変数は private にし、メソッド経由で制御する**
- **"尋ねるな、命じろ" の設計を意識する**
    - 例：インスタンス変数を直接見るのではなく、メソッドを通じて適切な処理を行う

---

## まとめ
本章では、低凝集な設計を避けるためのポイントを解説した。  
低凝集を防ぎ、保守性の高い設計を目指すために、以下を意識する：

1. **static method は極力減らす**
2. **初期化ロジックは factory method で統一**
3. **common / util class の乱立を防ぐ**
4. **出力引数は使わない**
5. **多すぎる引数は Value Object にまとめる**
6. **メソッドチェインは極力避ける**

---

## 方針
高凝集な設計を心がけることで、コードの変更耐性を向上させ、保守しやすくする。  
特に、**データとロジックの適切な結びつきを意識し、設計の一貫性を保つこと**が重要である。  
設計が難しいと感じる場合は、チームメンバーと相談しながら進めるのが望ましい。
SwitchBot APIを使って、GrafanaとZabbixでおしゃれなダッシュボードを作ります。【①SwitchBotAPI v1.0実行編】

## 1. SwitchBotAPIとは
SwitchBot皆様使われていますでしょうか。
私は、温度計センサーを複数と、カーテンやCO2センサーなどで使用しています。
ただこれらの情報を見るためにはスマホからアプリを開いたり、スマホのウィジェットに乗せたりとスマホを開かなくてはいけません。
スマホではない画面に常時情報を表示させておきたいんだ。

ということで、GrafanaにSwitchBotから取得した情報を載せていくための記事です。


## 2. SwitchBotAPIの使用準備

以下がAPIの公式ドキュメントになります。

https://github.com/OpenWonderLabs/SwitchBotAPI

こちらのREADME.mdによると、スマホからアプリを開いて、以下を実施すれば、
APIを使用するための**トークン**と**クライアントシークレット**を取得できます。

>1\. App StoreまたはGoogle Play StoreでSwitchBotアプリをダウンロードしてください
>
>2\.SwitchBotアカウントを登録し、アカウントにログインします
>
>3\. アプリ内でオープントークンを生成します。アプリバージョン≥V9.0の場合、a) プロフィール > 設定 > バージョン情報に移動します。b) アプリバージョンを10回タップします。開発者向けオプションが表示されます。c) 開発者向けオプションをタップします。d) トークンを取得をタップします。
>
>4\. アプリバージョン<V9.0の場合、a) プロフィール > 設定に移動します。b) アプリバージョンを10回タップします。開発者向けオプションが表示されます。c) 開発者向けオプションをタップします。d) トークンを取得をタップします。


## 3. SwitchBotAPIを使ってみる。（v1.0編）

:::note warn
v1.0は2025/2/6現在も使用可能ですが、セキュリティ上の観点により後述のv1.1がSwitchBot社の推奨です。
:::

さて、実際にAPIを使ってみたいと思います。
その前にAPIを実行する環境を適当に用意します。

詳細は記載しませんが、私は以下の環境で実行しています。
| 項目 | 内容 |
|-----|------|
|OS|CentOS Stream 9|
|使用コマンド|curl, jq|

### 3.1 デバイスリストの取得

では、さっそく以下のコマンドを実行してみましょう。
{トークン}には、事前に取得した長いトークンの値を入れてみましょう。
```
curl -H "Authorization:{トークン}" -X GET "https://api.switch-bot.com/v1.0/devices"
```

うまくいっていれば、以下のような結果が返ってきたはずです。
（結果の内容は一部省略しています。）
```
{"statusCode":100,"body":{"deviceList":[{"deviceId":"XXXXXX","deviceName":"XXXXXX","deviceType":"Bot","enableCloudService":true,"hubDeviceId":"XXXXXX"}, .....(省略)...]},"message":"success"}

```

わかりずらぁ・・・。
ということで、今度は最初に実行したコマンドへ一工夫入れます。

```diff_batchfile
- curl -H "Authorization:{トークン}" -X GET "https://api.switch-bot.com/v1.0/devices"
+ curl -H "Authorization:{トークン}" -X GET "https://api.switch-bot.com/v1.0/devices" | jq
```

パイプでjqを入れてやることで、JSON形式で結果を返してくれるようになります。

```
{
  "statusCode": 100,
  "body": {
    "deviceList": [
      {
        "deviceId": "XXXXXX",
        "deviceName": "XXXXXX",
        "deviceType": "Plug Mini (JP)",
        "enableCloudService": true,
        "hubDeviceId": "000000000000"
      },
      {
        "deviceId": "XXXXXX",
        "deviceName": "XXXXXX",
        "deviceType": "Meter",
        "enableCloudService": true,
        "hubDeviceId": "000000000000"
      },
      
・・・（省略）・・・
    ]
  },
  "message": "success"
}
```

### 3.2 デバイスの状態を取得
先ほどの実行結果で、**deviceId**という値が取得できましたが、
こちらが、SwtichBotのデバイスに個別に割り当てられているIDになります。
これを取得すれば、あとは簡単にデバイスの状態を取得できるようになります。

次は以下を実行ください。{deviceid}には先ほど取得したdeviceIdの値を入れてください。

```
curl -H "Authorization:{トークン}" -X GET "https://api.switch-bot.com/v1.0/devices/{deviceid}/status" | jq
```
以下のような結果が返ってきたかと思います。
こちらは私の手元にある温度計センサーの状態を取得したものになります。
（temperatureが温度、humidityが湿度になります。室外に置いている温度計なので・・・。）
```
{
  "statusCode": 100,
  "body": {
    "version": "V0.5",
    "temperature": 4.6,
    "battery": 60,
    "humidity": 41,
    "deviceId": "XXXXXX",
    "deviceType": "WoIOSensor",
    "hubDeviceId": "000000000000"
  },
  "message": "success"
}
```
## 4. 最後に
以上、お疲れさまでした。
次はv1.1を使ったデータの取得編です。

最終的にこちらで取得した値をすべてZabbixで取得し、数分間隔でグラフにしていき、それをGrafanaのダッシュボードに乗せていくイメージです。
先は長いですが順番にやっていきます。
生成AI時代のITエンジニアスキルのコモデティ化について

## はじめに

皆さん生成AI使いこなしてますか？
最近は[DeepSeek](https://www.deepseek.com/)や[deep research](https://openai.com/index/introducing-deep-research/)が話題ですね。

最近思うITエンジニアスキルのコモデティ化について思ったことを書いてみようと思います。

## 本編

ITエンジニアといってもたくさんの範囲があります。
いわゆるマネジメントをする人、プログラミングをする人、資料を作る人、テストをする人、セキュリティやインフラを管理する人など様々です。
私はAIが完全にITエンジニアの仕事を奪うのはもっと先だとは思ってますが、直近での危機感として、**ITエンジニアスキルのコモデティ化**は注視するべきだと思っています。

このITエンジニアスキルのコモデティ化は今に始まったことではありません。
少し前まではインフラ、フロントエンド、バックエンドと役割が分かれていました。
しかし、今ではインフラも、フロントもバックエンドもカバーできるのが当たり前に求められる時代になっています。
この背景にはいろいろな理由があると思いますが、クラウドの普及と豊富なドキュメントが大きな役割を担っていると思います。
クラウドによって、ITシステム作成のハードルがぐんと下がりました。誰でも安価にシステムを作ることができるようになり、簡単に学習できる環境を用意できます。
世の中には豊富なドキュメントがあふれているので、短時間に簡単にシステムを作ることができ、トラブルシューティングのノウハウも調べればすぐに見つかります。

時代の流れとともに、**私たちのスキルの価値は相対的に下がってきている**のです。
そして、生成AIの時代が始まり、この流れはさらに加速すると考えられます。

ITエンジニアでない人が、生成AIに聞きながらモバイルアプリを作れる時代になりました。
これにより、今後はシステム開発自体がコモデティ化していくと考えています。

そもそも、ITシステムは目的を達成するためのツールでしかありません。
これまではそのツールを作ることが難しかったので、ツールを作ること自体に価値がありましたが、今後はそうはいかなくなってくる時代が来ます。

少し話は変わりますが、お金は人の欲求から生まれると思っています。
そして人の欲求は際限なく増え続けていきます。
なので、ビジネスが成り立っています。
たとえば、おいしいものが食べたい、という欲求から飲食業にお金が流れます。
1回おいしいものを食べたらそれで満足ですか？
違いますよね、さらにおいしいものを食べたい、と思うはずです。
人の欲求は尽きることが無いので、世の中のビジネスが成り立つ、しかし、同じものが世の中にあふれれば、その価値は相対的に下がります。
では、どうすればよいのか、新しいものを作り続けるしかありません。
過去にタピオカ屋のビジネスモデルが称賛されていましたが、需要と供給や相対的な価値を見極めて、新しいものを作り続けていくしかありません。([参考](https://note.com/hukugyouotaku/n/ne3cbb58ff0ea))

そもそも同じことをしている会社は想定的にマイナスです。
なぜならば、他の会社は成長していくため、現状維持に固執していると、相対的に自社の価値が下がり、最終的には競争に勝てなくなるからです。

現在のシステム開発のスキーム自体は今後数年でバブル崩壊すると思います。
(もちろん、面倒な作業を外注したい、という欲求自体は残り続けるので、完全になくなるとは思いませんが。)
次に重要になるのはどう作るのか、ではなく何を作るのか。
システム開発をメイン事業とするのではなく、人の欲求を満たすものを作る、そのためにITシステムを使う、ということが求められてくると思います。
このビジネス視点の転換ができないと、システム開発会社の価値が相対的に下がり、今後衰退していくでしょう。


## 補足

### DX市場は今後も成長するといわれているけど？

はい、なので仕事自体は存在すると思いますが市場価値は下がると思っています。
いわゆる人は足りないけれども、その作業自体は誰でもできるよね？という状態になると思います。

### 人が足りないのであれば価値が高いのでは？

人が足りないのと価値が高いのは別です。
例えば誰でもできる作業に対して人が足りないからと高い給料を設定したとします。
この場合、だれでもできる作業に対して付加価値の高い作業はより高い給料の設定になるため、すべての値段が上がることになり、結局意味がありません。

### マネジメントや要件定義はの領域は？

これについてはAIに置き換えることが難しい領域なので価値は高いまま残ります。
人をマネジメントするのは非常に難しく、顧客が作りたいものを分解し、システムを作れるレベルまで整理する作業も難しいためです。
結局のところ、対人の作業は残り続けると思います。
PowerShellでFirefoxやChromeをWindowsにインストール

このシリーズの他の記事は、[オラクル・クラウドの個人ブログ一覧 ](https://qiita.com/letian/items/10152a4fec813c1b7d98)からご覧いただけます。

# 初めに
このブログでは、PowerShellスクリプトを活用して、<strong>Firefox</strong>や<strong>Chrome</strong>の自動インストールを実現する方法を解説します。特に、クラウド環境での効率的なセットアップを目指す方や、Computeインスタンスの作成時にブラウザを自動的にインストールしたい方にとって、一助となれば幸いです。

<strong>cloud-init</strong>スクリプトに組み込むことで、インスタンスの初期設定時にブラウザを自動インストールできるようになり、手動でのインストール作業を省くことができます。これにより、環境構築のスピードを大幅に向上させることが可能です。

__動作確認済環境__
Windows Server 2019 Standard (OCI VM)
Windows 11

__目次__
- [Mozilla Firefoxのインストール](#mozilla-firefoxのインストール)
- [Google Chromeのインストール](#google-chromeのインストール)

# Mozilla Firefoxのインストール
__ステップ__
- インストーラのダウンロード
- インストール開始（サイレントモード）
- インストーラの削除（オプション）
```powershell
#ps1_sysnative

# Define the URL of the browser installer
$DownloadURL = "https://download.mozilla.org/?product=firefox-latest&os=win64&lang=en-US"
$InstallerFile = Join-Path $env:TEMP "Firefox_Installer.exe"

# Download the Mozilla Firefox installer
$ProgressPreference = 'SilentlyContinue'
Invoke-WebRequest -Uri $DownloadURL -OutFile $InstallerFile

# Unblock the downloaded file
Unblock-File -Path $InstallerFile

# Install Firefox silently
Start-Process -Wait -FilePath $InstallerFile -Args "/S"

# Clean up the installer (optional)
Remove-Item $InstallerFile
```
上記のダウンロードリンクは英語版です。日本語版のリンクは次となります。
`https://download.mozilla.org/?product=firefox-latest&os=win64&lang=ja`

# Google Chromeのインストール
ステップは上記と同じで、インストーラURLとファイル名以外の違いは、次です。
インストール・パラメータ：`/silent /install`
```powershell
#ps1_sysnative

# Define the URL of the browser installer
$DownloadURL = "https://dl.google.com/chrome/install/latest/chrome_installer.exe"
$InstallerFile = Join-Path $env:TEMP "ChromeSetup.exe"

# Download the Google Chrome installer
$ProgressPreference = 'SilentlyContinue'
Invoke-WebRequest -Uri $DownloadURL -OutFile $InstallerFile

# Unblock the downloaded file
Unblock-File -Path $InstallerFile

# Install Chrome silently
Start-Process -Wait -FilePath $InstallerFile -Args "/silent /install"

# Clean up the installer (optional)
Remove-Item $InstallerFile
```
※、上記のインストーラー（chrome_installer.exe）は多言語対応で、システムのデフォルト言語で自動的にChromeをインストールします。

:::note
OCI cloud-initスクリプトで使用する場合は、スクリプトの先頭に`#ps1_sysnative`を追加する必要があります。
:::

以上

----
__関連記事__
[OCI Cloud-initスクリプト](https://qiita.com/letian/items/10152a4fec813c1b7d98#11-cloud-init%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88)
ChatGPT o3-mini-highを使ってGoogle MAP APIを呼び出し埼玉と東京のラーメンマップを作らせてみた

表題の通り、全て**ChatGPT o3-mini-high**に指示をして、**Google MAP API**を設定のやり方から、**typescript**を使ってwebブラウザでGoogle Mapを呼び出しマップにラーメン屋のピンを打つところ、評価が上位の店にはマークを付けるプログラムをすべてコーディングしてもらい、最終的に**Google Cloud**のインスタンス上のWebサーバーで公開するところまで指示してみました。コンパイル時にエラーが発生しても、エラー内容を聞くだけで的確に修正版のコーディングを教えてくれました。程度は相当レベルが高いです。

**以下はすべてを指示したChatGPTのリンクです。**
https://chatgpt.com/share/67a38318-de54-8007-bc32-a4c76bd20ada



https://storage.googleapis.com/saitama-ramen-map-site/index.html

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186776/acf0fc23-2922-5e51-5609-b1d4062e393c.png)
一人でやると身につかないからORACLE MASTER Silver DBA 2019の勉強ログをつける　2日目

あやうく1日目で挫折するところだった。意志が薄弱すぎる。
今日はインスタンスの中身についてやっていきます。

### インスタンスとデータベースファイルの関係
OracleDBnの中身は「インスタンス」と「データベースファイル」で構成される。
インスタンスとデータベースファイルが一対一で存在しており、そのインスタンスの中身がいくつかに分かれてるみたいなイメージ。
## インスタンスの中身
### ・SGA（システムグローバルエリア）
コンポーネントと呼ばれるいくつかのメモリ領域が存在している。
#### コンポーネントの種類
1.データベースバッファキャッシュ
→データファイルから読み込んだブロックをキャッシュする。
（キャッシュする：一時保存）
また、変更されたブロックを書き出す前に一時保存する。

2.REDOログバッファ
→REDOログに書き込む前のREDOデータをキャッシュする。

3.共有プール
→解析済SQL、データディクショナリをキャッシュする。
（データディクショナリ：データの名称、意味、属性、所在、データ型などをまとめた辞書のこと）

4.Javaプール
→ストアドプログラムの実行時に使用するスペース

5.ラージプール
→バックアップ、並列処理などの作業領域

##### 1について
**セグメント**：表、索引などのデータを保持するオブジェクトのこと。オブジェクト：セグメントの割合は1:1。特定の表領域に保管されている。1つ以上のエクステントからなる。
**ブロック**：データファイルを固定サイズに分割したもの。オブジェクトのデータを保管する。
**エクステント**：ブロックのかたまり。セグメントに追加することで、セグメントに空き容量を追加できる。連続した複数のデータブロックからなる。
**表領域**：1つ以上のデータファイルからなる。データファイルのブロックの大きさは同じ。また、1つ以上のセグメントを保管できる。

##### 2について
変更されたブロックを書き込む前にデータベースバッファキャッシュに保存しているが、このときインスタンスに障害が発生するとブロックの変更が失われる。そのため、「変更履歴」としてREDOログデータを残している。
REDOログはトランザクションをコミット（＝変更の確定）した時点で発生する。このログデータは、障害の復旧（インスタンスリカバリ、もしくはメディアリカバリ）で使用される。

##### 3について
要はでかキャッシュ入れ。解析済SQLを保存して、時間短縮やサーバの負担を減らすなどができる。データディクショナリ（辞書）の情報をキャッシュして、繰り返しアクセスする情報に対する性能を向上させることができる。

## ・バックグラウンドプロセス
SGAと一緒に起動するプロセスの総称。

**1.DBWn(データベースライター）**
→データベースバッファキャッシュ内の変更されたブロックをデータファイルに書き込む。

**2.LGWR（ログライター）**
→REDOログバッファのREDOデータをREDOログファイルに書き出す。

**3.CKPT(チェックポイント）**
→データベースバッファキャッシュ内の変更されたブロックをデータファイルに書き込む**指示を出す。** 併せて、制御ファイルにチェックポイント情報を書き込む。

**4.SMON（システムモニター）**
→ **「インスタンスが」** 強制終了したとき、次回起動時にデータベースファイルの整合性を復旧する処理をする。未使用の一時セグメントを開放する。

**5.PMON（プロセスモニター）**
→ **「プロセスが」** 異常終了したとき、そのプロセスが使用していた様々なデータ、またリソースのクリーンアップをする。また、アイドル時間を超えたセッションに対して強制終了などの対処を指示する。

**6.MMON（管理モニター）**
→性能分析で使用される統計情報を定期的に収集する。

**7.ARCn（アーカイバ）**
→ログスイッチの発生後にREDOログファイルのREDOデータをアーカイブログファイルとしてコピーする。

**8.LREG（リスナー登録プロセス）**
→インスタンスに関する情報をリスナーに登録する。

##### 1について
遅延書き込み：データベースバッファキャッシュに保存された変更済ブロックを、DBWnによって後でデータファイルに書き込むこと。ストレージの処理能力を超えた変更があっても、タイミングをずらして書き込み処理をじっこうするので処理負荷を軽減できる。
また、同じブロックが複数回変更された場合にデータファイル内のブロックへの書き込みを1回にすることができる。

##### 7について
ログスイッチ：多重化したREDOファイル（メンバー）、また多重化されたREDOファイルの組（グループ）のカレントに空きがなくなった際に、別のロググループがカレントとなって切り替わるときの呼び方。

ARCHIVELOGモード：OracleDBにおいてアーカイブデータが出力される運用モードのこと。古いREDOファイルにデータを上書きしていく際、上書きされる前にREDOデータをコピーしてアーカイブログファイルを生成する。メディアリカバリを実行する際は必須の運用モード。

多すぎ。
Xcodeで謎のエラー Generic struct 'FetchRequest' requires that 'Task<Success, Failure>' conform to 'NSFetchRequestResult'

## 問題発生

XcodeでCore Data有りのProjectを作成
デフォルトのエンティティに加え
「Task」という名前のエンティティを追加

すると以下のような謎のエラー
```
Generic struct 'FetchRequest' requires that 'Task<Success, Failure>' 
conform to 'NSFetchRequestResult'
```
が発生

## 解決手順

まずは、Core Dataで定義したTaskエンティティが、
Core DataのNSManagedObject（Core Dataのデータを扱うための特別なオブジェクト）であることを確認

しかし、そもそも、そのコードを記述するのに必要な
・Task+CoreDataClass.swift
・Task+CoreDataProperties.swift
の２ファイルが存在しない🤔

なのでこの２ファイルを
手動で作成する必要が出てきてしまいました

🔹 自動生成手順
・Xcodeのデータモデル（.xcdatamodeld）を開く。
・左側のCore DataのManagerから該当のエンティティを選択。
・Editorタブ > Create NSManagedObject Subclass をクリック。
・「Model（プロジェクト名.xcdatamodeld）」を選択して「Next」。
・「Task」を選択し、「Next」。
・保存先を選択して、「Create」。

これで、２つのファイルが生成され、エラーも解消されました

## エンティティ名の問題

しかし、追加で問題が・・・😅

ここで作成した「Task」というエンティティ名が
Swiftの標準ライブラリにも存在する型（非同期処理用のTask）と衝突することが判明

結局エンティティ名をTaskからMyTask等に変更する羽目に😭

## まとめ
✅Core Dataのエンティティの定義に必要なファイルが無ければ手動で生成する
✅Core Dataのエンティティ名はライブラリの名前等と重複しないように気を付ける

以上です。
よろしくお願いします。
フィーチャーフラグ実装のベストプラクティス：シンプルな実装から本番運用まで


[r/programming - It's OK to hardcode feature flags](https://www.reddit.com/r/programming/comments/1ihfjcd/its_ok_to_hardcode_feature_flags/)

フィーチャーフラグについてメモ

## はじめに

フィーチャーフラグとは、アプリケーションの特定の機能をオン/オフできる仕組みのことです。新機能のリリース管理、A/Bテスト、段階的なロールアウトなどに使用されます。

## フィーチャーフラグ実装の基本原則

1. シンプルに始める
2. 必要な機能だけを実装する
3. 技術的負債を管理する

## 実装パターン

### 1. ハードコードされたフラグ（最もシンプル）

最も基本的な実装方法です。小規模なプロジェクトや、頻繁な変更が必要ない機能に適しています。

```typescript
class FeatureFlags {
  private static readonly flags = {
    NEW_UI: false,
    BETA_FEATURE: false,
    EXPERIMENTAL_API: false
  };

  static isEnabled(flag: keyof typeof FeatureFlags.flags): boolean {
    return this.flags[flag];
  }
}

// 使用例
if (FeatureFlags.isEnabled('NEW_UI')) {
  // 新UIを表示
} else {
  // 従来のUIを表示
}
```

このパターンのメリット：
- 実装が極めてシンプル
- コードレビューで変更が明確
- デプロイメントプロセスと完全に統合
- パフォーマンスオーバーヘッドなし

### 2. 設定ファイルベースのフラグ（中程度の柔軟性）

設定ファイルを使用することで、コードの再デプロイなしでフラグを変更できます。

```typescript
// config/feature-flags.json
{
  "feature_flags": {
    "NEW_UI": {
      "enabled": false,
      "description": "新しいUIデザインの有効化",
      "owner": "UIチーム"
    },
    "BETA_FEATURE": {
      "enabled": true,
      "description": "ベータ機能",
      "owner": "製品チーム"
    }
  }
}

// FeatureFlags.ts
class FeatureFlags {
  private static config: any = null;

  static async initialize() {
    const response = await fetch('/config/feature-flags.json');
    this.config = await response.json();
  }

  static isEnabled(flag: string): boolean {
    return this.config?.feature_flags[flag]?.enabled ?? false;
  }
}
```

このパターンのメリット：
- 設定変更が容易
- フラグに関するメタデータの管理が可能
- 環境ごとに異なる設定が可能

### 3. データベースベースのフラグ（最も柔軟）

大規模なアプリケーションや、動的な制御が必要な場合に適しています。

```typescript
interface FeatureFlag {
  id: string;
  name: string;
  enabled: boolean;
  description: string;
  rules: {
    type: 'percentage' | 'group' | 'region';
    value: any;
  }[];
  userPercentage: number;
  lastModified: Date;
}
```

このパターンのメリット：
- リアルタイムな制御が可能
- ユーザーごとの制御が可能 → 段階的なロールアウトのサポート
- 管理用UIの実装が可能

## どの実装を選ぶべきか？

以下の質問に答えることで、適切な実装パターンを選択できます：

1. フラグの変更頻度はどの程度か？
   - 低頻度 → ハードコード
   - 中頻度 → 設定ファイル
   - 高頻度 → データベース

2. 誰がフラグを管理するのか？
   - 開発者のみ → ハードコード
   - 開発者とオペレーション → 設定ファイル
   - プロダクトマネージャーも含む → データベース（+ 管理UI）

3. 段階的ロールアウトは必要か？
   - 不要 → ハードコードまたは設定ファイル
   - 必要 → データベース

## 実装時の注意点

1. **フラグの寿命を管理する**
   - 一時的なフラグは明確な削除計画を立てる
   - コメントで目的と予定を記録する

2. **パフォーマンスを考慮する**
   - フラグの評価は頻繁に行われる可能性があるため、キャッシュを検討
   - データベースアクセスは最小限に抑える

3. **デフォルト値を適切に設定する**
   - フラグが見つからない場合のフォールバック動作を明確にする
   - 安全側にデフォルトを設定する

4. **監視とログ記録**
   - フラグの状態変更をログに記録
   - 問題が発生した際の切り戻しプランを用意

## まとめ

フィーチャーフラグの実装は、プロジェクトの規模や要件に応じて適切なアプローチを選択することが重要です。必要以上に複雑な実装を避け、シンプルさを保ちながら、必要な機能を段階的に追加していくことをお勧めします。

## 参考リンク

- [Feature Toggles (aka Feature Flags)](https://martinfowler.com/articles/feature-toggles.html)
- [It's OK to hardcode feature flags](https://code.mendhak.com/hardcode-feature-flags/)
【Rails】nilのみ禁止するバリデーション

以下のように記述することで空文字は許容し、nilのみ禁止するバリデーションを設定できます。

```rb
class User < ApplicationRecord
  validates :name, exclusion: [nil]
end
```

または

```rb
class User < ApplicationRecord
  validate :name_cannot_be_nil

  private

  def name_cannot_be_nil
    errors.add(:name, "can't be nil") if name.nil?
  end
end
```

## 参考
https://railsguides.jp/v8.0/active_record_validations.html#presence
pygameでマルチプレイ3

![詐病.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3195955/1198d84c-9fe4-c9c3-cf01-96c9afb7d956.gif)
見にくい画面ですみません
左下にSteamでの名前が描写されています。
前回はnetwork同期のシステムを作成しました。
次は、UIシステムです。
# UI
クライアント環境で基本的に動作するため作りは多少複雑にしても、
面倒なことは起きないでしょう。(ネットワーク関連が存在しないので)

今回はウィンドウのサイズに合わせて、UIが縮小したり位置を変えたりします。
これは今後に作るCameraのシステムにも共通する部分ですので、大事なところです。

# Canvas
私がおすすめする仕組みとしてはキャンバススケーラーです。
最初にキャンバスのサイズを決定して、そこからウィンドウのサイズにスケーリングするものです。

例えばCanvas(1000, 1000)と作ったとします。
次にWindowが(2000, 2000)だとします、この場合UIの要素は2倍スケーリングすることになります。
window/canvasって感じです。
CanvasクラスにCanvasToScreenScaleFactorとScreenToCanvasScaleFactorというメソッドを作って、
すべてのスケーリング処理を統一します。
これだけであとはUIを作ることができます。


# UI基底クラス
まずはUIの基底クラスを作成します。
多く使われるだろうTextとImageの基底クラスを作成します。
# UIElementクラス
これは上記の二つの基底クラスです。
基本的にはRectTransformというクラスを持っています。
# RectTransform
UnityにあるRectTransformというよりはただのTransformに近い動作をします。
親のglobalPosition + 自身のlocalPosition = 自身のglobalPosition
となっています。scaleとrotationは試していないので不完全です。
なので紹介しませんが、考え方としては、scaleは親*子供にしていて、rotationは自身のlocalPositionと親のglobalPositionの位置の方向ベクトルを作成し、回転行列で回転させた場合どれほど移動するかoffsetを計算するして、global_positionに足し合わせる感じです。

# UIObjectクラス
これはUIElementとUIObject, UIComponentをリストで所持するクラスです。
基本的にButtonUIやListUIなどで使用されるもので以後のUIはすべてこれを継承します。
UIComponentは基本的にアニメーションとして使用します。(もちろんほかの機能を追加することもできます)
私が作ったのは二つだけでFadeInOutAnimationクラスとMoveAnimationです
これらはUIComponentクラスを継承したUIAnimationクラスを継承します。

システム的には前回に紹介した(かなりプログラムが現在は変わってますが)コルーチンクラスをUIAnimationが所持しており、それを使ってMoveやFadeを行います。

UIObjectは自分のクラスをリストで持っています、これは親子関係を表しており、
updateではTransformに自身のglobalTransformを渡す仕組みが描かれています。

# おわり
UIのシステムはちょっと大変でした(三日かかりました)
アルバイト中にはプログラムがかけないのですごく焦ってました。
これはよくない影響です。

前にスリザリオを作るって言ってましたが、
まだまだ道は険しそうです
GameObjectも今後は親と子供のシステムが採用されると思います。
これでまたNetworkの同期が大変になります。

私が恐れているのは送信データが増えて、ネットワークが遅くなることです
現在は作りやすさを優先してますが、今後はネットワークの最適化も必要になると考えると、
先が思いやられます。

Cameraシステムはこれと全く同じ動作をするようにしようかと思っています
先にCameraの範囲を決定して、スケーラーを作成し、何かしらの描写コンポーネントでは、
最後にこのスケーラーの縮小をするようにすれば、様々なウィンドウサイズにも対応できると思います。

windowサイズは大体FullHDかWQHD, 4Kしかないと思いますが、念のためです。
応用情報試験のAI分野対策 ＆ G検定学習に役立つコンテンツ紹介

# こんな人に
- 応用情報受験をするが、AI分野の対策に悩んでいる人
- G検定を受験する人

応用情報の新シラバスでAI分野に大幅に改訂が入り、この部分は過去問での対策が難しい状況です。
シラバスを確認したところ、G検定受験の際に学習した知識がかなり役に立ちそうでした。

あれもこれも勉強するのは大変なので、厳選した2つのコンテンツを紹介します。

# おすすめコンテンツ
## 【AI超初心者向け】Deep Learning解説動画（YouTube）

何から勉強しようか悩んだらこの動画！
「AIに関する知識がゼロで、何を読んでも頭に入ってこない…」という人にもおすすめです。SONYの小林さんがDeep Learningの基礎を非常に分かりやすく解説動画してくださっています。（そしてなにより無料！）

[YouTube再生リスト：Deep Learning入門](https://youtube.com/playlist?list=PLg1wtJlhfh23pjdFv4p8kOBYyTRvzseZ3&si=CUV2CUN-jhA6Jfpl)

1つの動画が10分ほどなので、通勤通学中に見てもよし、休憩がてらに見てもよしです。

:::note info
Deep Learning自体は、AIの一分野である機械学習の手法の1つです。比重的にかなり大きな部分なのでここをざっくりとでも理解しておくと、学習がスムーズに進むと思います！
:::

## 【体系的な学習に】G検定対策テキスト
G検定受験者の方はもちろん、G検定対策テキストで体系的に学習・対策しましょう！

応用情報受験者の方も、AI分野全般を体系的に学習したい場合に教科書代わりに活用できます。

[Amazonリンク：ディープラーニングG検定（ジェネラリスト）最強の合格テキスト](
https://www.amazon.co.jp/dp/4815622752/ref=sspa_dk_detail_2?psc=1&pd_rd_i=4815622752&pd_rd_w=2cml2&content-id=amzn1.sym.f293be60-50b7-49bc-95e8-931faf86ed1e&pf_rd_p=f293be60-50b7-49bc-95e8-931faf86ed1e&pf_rd_r=TZD1KA364K4QTSQ6SS7B&pd_rd_wg=DN8TJ&pd_rd_r=1299987b-8eb3-4148-bbd3-ec844a15d506&s=books&sp_csd=d2lkZ2V0TmFtZT1zcF9kZXRhaWw)

# 最後に

今回紹介したコンテンツが皆様の学習のお役に立てば幸いです。
私も応用情報はこれから取得するので、一緒にがんばりましょう！
個人的な備忘録：Dockerコンテナの起動コマンド「CMD」と「ENTRYPOINT」の違いを簡単にまとめてみた

## はじめに

Docker では、コンテナ起動時に実行するコマンドを `CMD` と`ENTRYPOINT` で指定できます。

:::note warn
**どちらも似た機能を持っていますが、使い方を間違えると思った通りに動作しないことがあります。**
:::

この記事では、それぞれの違いや使い分けのポイントを簡潔にまとめます。

## 書こうと思ったきっかけ

Dockerfile を書いているとき、`CMD ["./app"]` を指定したのに`docker run myapp ls` で `ls` が実行されてしまい、思った動作と違って驚きました。  

:::note info
**調べると、`CMD` は上書きされる仕様で、確実にコマンドを実行したいなら `ENTRYPOINT` を使うべきと分かりました。**
:::

この違いを整理しておけば、同じように迷うことが減ると思い、まとめることにしました。

## CMD とは？

`CMD` は **コンテナ起動時に実行するデフォルトのコマンド** を指定するための Dockerfile の命令です。

ただし、`docker run` 実行時に別のコマンドを指定すると、`CMD` の内容は上書きされます。

**使い方**

Dockerfile で以下のように指定します。

```Dockerfile
CMD ["echo", "Hello, World!"]
```

**動作の特徴**

- `CMD` で指定したコマンドは、**デフォルトの実行コマンド** となる。  
- `docker run` 実行時にコマンドを指定すると、`CMD` の内容は**上書きされる**。

**実行例**

```sh
docker run myapp
# → "Hello, World!" が表示される
```

```sh
docker run myapp ls
# → "ls" が実行される（CMD の "echo Hello, World!" は上書きされる）
```

## ENTRYPOINT とは？

`ENTRYPOINT` は **コンテナ起動時に必ず実行するコマンド** を指定するための Dockerfile の命令です。 

`docker run` 実行時に別のコマンドを指定しても、`ENTRYPOINT` の後ろに**引数として渡される**ため、上書きされません。

**使い方**
Dockerfile で以下のように指定します。

```Dockerfile
ENTRYPOINT ["echo"]
```

**動作の特徴**

- `ENTRYPOINT` で指定したコマンドは **強制的に実行される**。  
- `docker run` 実行時に指定したコマンドは、`ENTRYPOINT` の**引数として渡される**。  

**実行例**

```sh
docker run myapp Hello, World!
# → "Hello, World!" が表示される（echo の引数として渡される）
```

```sh
docker run myapp ls
# → "ls" が実行される（echo ls）
```

## CMD と ENTRYPOINT の違いまとめ

Docker では `CMD` と `ENTRYPOINT` の両方を使ってコンテナ起動時に実行するコマンドを指定できますが、それぞれの動作には違いがあります。

| 比較項目 | CMD | ENTRYPOINT |
|---------|-----|------------|
| **主な用途** | デフォルトのコマンドや引数を指定 | 常に実行すべきコマンドを指定 |
| **ユーザーが `docker run` 時にコマンドを上書きできるか** | できる（例: `docker run myapp bash` → `bash` が実行される） | できない（例: `docker run myapp bash` → `bash` は `ENTRYPOINT` の引数として渡される） |
| **動作の安定性** | 上書き可能なので、意図せず変わる可能性がある | 強制的に実行されるため、意図した動作を保証しやすい |

### 使い分けのポイント
- `CMD` はデフォルトのコマンドを指定するが、**上書き可能**。
- `ENTRYPOINT` は**強制的にコマンドを実行**し、意図した動作を保証しやすい。
- **確実に実行すべきコマンドがある場合は `ENTRYPOINT` を使うのが適切**。

## まとめ
最後までお読みいただき、ありがとうございました。***Dockerコンテナの起動コマンド「CMD」と「ENTRYPOINT」の違いについて、理解が深まったなら嬉しいです。***

今後も、このような基礎的な内容を分かりやすく整理し、丁寧にまとめていこうと思います。
新シラバス基本情報技術者試験の勉強法・所感

# はじめに
　この度、CBT方式にて、基本情報技術者試験に合格したので、自分なりの勉強法や試験を受けた所感などを書いていけたらなと思います。
　受けた日は2025年の2月なので、新シラバスver9.0(2024年10月適用)になります。<br>

# 前提
* 情報系大学出身でアルゴリズムなどは少し理解できる程度
* 無資格
* 勉強期間約三カ月
* 一日1~2時間程勉強
* 取る目的はIT全体の知識を広く知っておきたく、どうせ学習するなら何か記録に残るものを目標に勉強したかった(承認欲求)

# A試験勉強法
**インプットは参考書、アウトプットは過去問道場をとにかくやりました。**<br>
　参考書については「栢木先生の基本情報技術者教室」という本。他の参考書として、「キタミ式」や「いちばんやさしい 基本情報技術者」というのも有名で、本屋でパラパラと見ましたが、栢木先生が一番解説書として、文字とイラストのバランスがとれていると感じました。「キタミ式」はイラストを使うことで分かりやすいを売りにしているようでしたが、逆に文字が少なく自分にとってはわかりにくい印象。一方「いちばんやさしい 基本情報技術者」は逆に文字が多く、学校の教科書のようなイメージ。
 
　栢木先生がイラストと文字のバランスがとれており、ここぞというときに欲しいイメージを持ってきてくれる参考書でした。これをとりあえず一周。<br>

**アウトプットはひたすら過去問道場を解きまくりました**
新制度サンプル~平成25年の春秋両方の過去問をひたすら解く。解き終わったら間違えた・分からなかった問題の解説を読むだけでなく、参考書に戻って分からない箇所とその関連の語句を調べるというサイクルを繰り返すイメージでした。
繰り返していくうちに何度も出た問題は、選択肢すべてを見るのではなく、関連するキーワードで答えられるようになってきました。(ITの知識を覚えるという視点では、あんまりよくない)

# B試験勉強法
　新シラバスになってからアルゴリズム8割、セキュリティ問題が2割ということで、旧シラバスの過去問はあてにならないと予想し、新制度になってからの過去問サンプル問題を計30問ほど解きました。その時点ではプログラミングのなんたるかを全く覚えてなく、ぼろぼろだったのでもう一度インプット作業に。
 　一番参考になったのは基本情報をYoutubeで解説している「すーさん」より、**「アルゴリズム問題をたった1動画で対策_基本情報技術者試験」の動画です。** 正直、アルゴリズム問題に関しては未知識の人でもこれを見れば合格できちゃうぐらいの完成度だと思います。<br>

その後、トレース力を重視し、もう一度サンプル問題を30問解いたら死ぬほど理解できました。<br>

結果として、B試験対策はサンプル問題を解くのと、youtubeを見ただけでした。


# 試験直前
自分が受けたCBT方式は個別で仕切られたパソコン付きの自習室のような部屋で受けるタイプで、周りの騒音が気になる自分にとっては最高の環境でした。自分のところには机にイヤーマフも置かれてたので、もしあったらぜひ使ってみてください。
また、A試験とB試験の間が10分と短く、水分補給とトイレ休憩ぐらいしかできないとのこと...

# A試験所感
**難しかった...** 過去問よりも難易度が上がっているイメージです。
体感、出た内容として過去問3割、過去問ではないが勉強した内容4割、知らない問題3割という割合でした。
過去問ではないが勉強した内容4割に関しては、その用語の技術を使う目的や使いどころなど、本質的な部分を知っていないと解けなかった印象です。まるで、過去問だけやってきた人を落とすための作りのようでした。
知らない問題に関しては、自分が少し古い参考書を使っていただけかもしれませんが、トレンド技術やIT業界で働く方にとって常識？のような問題がいくつか出たのを覚えています。

# B試験所感
B試験はサンプル問題とYoutubeだけで難なく解けた印象でした。
アルゴリズムに関してはオブジェクト言語やメモリアドレスなどの知識を多少付けた上で、トレース力があればどの問題も解くことができると思います。しかし、だらだらと最後までトレースしていたら時間が足りないと思います。
セキュリティ問題に関しては、過去問と同じような傾向だったので、同じように解きました。
正直B試験対策に時間を費やすよりもっとA試験を勉強すればよかった・・・と思いました。

# 結果
* 科目A 645/1000
* 科目B 725/1000

どちらも結構ぎりぎり...まあ受かればヨシです。
B試験が終わった瞬間すぐに結果が出ました。A試験ずっと不安でもやもやしていたけど合格できて良かった・・・！
感想としては、学んでいる最中は結構楽しかったです。普段職場で耳にするIT用語の意味だったり、今後の業務に生かせるような考え方などを学べた気がします。
IT企業に内定が決まった新卒の方などは4月までに一度チャレンジできれば、スタートアップがかなり違ってくるのじゃないかなと思います。新卒の方じゃなくてもチャレンジしてみれば今後の自信やモチベアップに必ずつながってくるかと思います！

自分も、次は応用情報かAWSの資格でも取ることを目標に頑張っていきます。
上嶋幸治のブログ：最速でエンジニアになる方法

上嶋幸治です。

エンジニアになるためには時間がかかると思われがちですが、効率的に学習し、実践を積むことで短期間でスキルを習得することが可能です。本記事では、最速でエンジニアになるための方法を紹介します。

### 1. 目標を明確にする

エンジニアといっても、さまざまな分野があります。自分がどのエンジニアになりたいのかを明確にしましょう。

- **Webエンジニア**: フロントエンド・バックエンド開発
- **モバイルエンジニア**: iOS・Androidアプリ開発
- **データサイエンティスト**: データ解析や機械学習
- **インフラエンジニア**: クラウドやサーバー管理

目標が決まれば、それに必要なスキルや学習内容を絞ることができます。

### 2. 必要なスキルを効率よく学ぶ

#### 2-1. 基本的なプログラミング言語を習得する

最速で学習するためには、まず **基礎となるプログラミング言語** を選びましょう。

- **Web開発** → JavaScript, Python
- **モバイル開発** → Swift (iOS), Kotlin (Android)
- **データサイエンス** → Python, R

特に **Python** は初心者向けで、多くの分野で活用できます。

#### 2-2. 実践的なプロジェクトを作る

学習だけではなく、**実際にアプリやウェブサイトを作ること** で理解を深めます。

- 小さなアプリやツールを作成
- オープンソースプロジェクトに参加
- クラウドソーシングで案件を受ける

#### 2-3. フレームワーク・ツールを学ぶ

現場で求められる技術として、以下のフレームワークやツールも学ぶと良いでしょう。

- **Web開発**: React, Vue.js, Django, Flask
- **モバイル開発**: Flutter, React Native
- **クラウド技術**: AWS, Google Cloud, Docker

### 3. 効率的な学習方法を取り入れる

最速でエンジニアになるには、**効率的な学習方法** を取り入れることが重要です。

#### 3-1. オンライン学習を活用する

- Udemy, Coursera, Progate, ドットインストール
- YouTubeでのチュートリアル動画

#### 3-2. コーディングブートキャンプを受講する

短期間で集中して学ぶ方法として **コーディングブートキャンプ** があります。

- TECH::CAMP, CodeCamp, Le Wagon など
- 実践的なプロジェクトを通じて学習
- メンターのサポートを受けられる

#### 3-3. アウトプットを意識する

知識を身につけるだけでなく、**ブログやSNSで学んだことを発信** することで、理解が深まります。

### 4. 実務経験を積む

スキルを身につけたら、次は **実務経験を積むこと** です。

#### 4-1. フリーランス案件を受ける

初心者でも受けられる案件は多数あります。

- クラウドワークス、ランサーズで案件探し
- 小規模なウェブ開発やWordPressのカスタマイズ

#### 4-2. インターンに応募する

企業の **エンジニアインターン** に応募し、現場経験を積むのも良い方法です。

- スタートアップ企業の短期インターン
- ベンチャー企業のアルバイトエンジニア

#### 4-3. 就職・転職を目指す

実績ができたら、ポートフォリオを作り、**エンジニアとして就職・転職活動** を始めましょう。

- GitHubに作ったプロジェクトを公開
- 技術ブログを運営してアピール
- 転職エージェントを利用する

### 5. 継続的な学習を続ける

エンジニアの世界は進化が速いため、学び続けることが大切です。

- 最新技術のキャッチアップ
- 技術コミュニティへの参加
- ハッカソンや勉強会に参加

### まとめ

最速でエンジニアになるためには、

1. 目標を明確にする
2. 必要なスキルを効率よく学ぶ
3. 実践的なプロジェクトを作る
4. 効率的な学習方法を活用する
5. 実務経験を積みながら継続的に学習する

この流れを意識すれば、短期間でエンジニアとしてのスキルを身につけ、実務に活かすことができます。焦らず、効率よく学習しながら、エンジニアとしてのキャリアをスタートさせましょう！
【Google Calendar Grouping】もうポチポチ✅したくない（自分だけ↔チーム全員のカレンダー切替 ）

# はじめに
ここ最近で四十肩の症状が出てきた、ノベルワークスのまとっち（[@matoi_thai](https://x.com/matoi_thai)）です。
今回は、昨日入れたGoogle Calendarの拡張機能を紹介します。

## こんな人に見てほしい
- Google Calendarで他メンバー表示のためにポチポチ✅してる人

# 背景
僕はGoogle Calendarで下記①↔②でよく切り替えます。でもめんどうです。

### ① 自分だけを週表示
今週の自分の予定を見て、いつまでに何をしないといけないか考える。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3713212/a2bc484b-43f4-6008-2b0e-01391d8635c2.png)

### ② チーム全員を日表示
チームの人で打合せできる（予定が入ってない）ところを探す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3713212/0f31cf1d-df05-cb7c-7a61-0e752dcf4379.png)

### 通常の操作①→②で11秒🕰️😠
同じチーム全員にポチポチ✅入れるところがめんどうなんです！
![通常の操作.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3713212/198294ff-c951-0699-76c7-7ec0c1048165.gif)

# Chrome拡張機能を入れてみた

https://chromewebstore.google.com/detail/google-calendar-grouping/lchiibhkigmcnmknpbakcbjmkphkmghd

あらかじめグループでまとめておけば一気に✅を入れられます。
![グループ切替.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3713212/21c5952b-24fc-89f1-0a6b-f3bff4a916f1.gif)

### 改善後の操作①→②で4秒🚀😊
もうチーム全員をポチポチ✅しないでいいんです！
![グループ操作.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3713212/774fdc7e-7f45-7d3b-656e-ee4b4ba07768.gif)

# おわり！