OmniAICreator/Qiita-1.07M huggingface dataset:
【随時更新】Countdown Calendar 2022

【随時更新】←これがついているQiita記事の4割は随時更新されないという事実

https://qiita.com/nkay/items/189496192b328bb2b5e5

事実でもなんでもないかも。統計は、常に作り直せる。

市場原理、行動理論などに基づいて、誘導していけばよい。

事実は常に変わっていくものであって、「事実」として固定した時点で虚像になるかも。


# 【随時更新】　Countdown  Calendar 2022

投稿条件

1.  【随時更新】　を表題または本文の１行目に掲載する

2. Countdown  Calendar 2022 期間に１度は記事を更新する。

3. 過去記事またはCountdown  Calendar 2022 期間の新規のいずれでもよい。

私が主催する、他のCountdown  Calendarすべて、過去記事またはCountdown  Calendar 2022 期間の新規のいずれでもよい。それぞれのCountdown  Calendarの趣旨にあてはまらない記事は、すべてここで受け付けます。

私が主催する、他のCountdown  Calendarは、新規記事５割以上を目指しています。

Ethernet Countdown  Calendar 2022を企画する

https://qiita.com/kaizen_nagoya/items/1a747cb74ba05b9ef023

Wi-Fi(IEEE 802.11) Countdown  Calendar 2022を企画する

https://qiita.com/kaizen_nagoya/items/7e14d70cafe4e87525a5

Wireshark Countdown  Calendar 2022を企画する

https://qiita.com/kaizen_nagoya/items/6896497cb6df6c96dde7

ここ、【随時更新】Countdown  Calendar 2022は、期間以前の記事の更新５割以上を目指しています。

なお、期間が始まる前は、 【随時更新】　を表題または本文の１行目に掲載する記事は、コメント欄にURLを誤記載くださると幸いです。表題(title)もおかきくださっても結構です。
 
「【随時更新】←これがついているQiita記事の4割は随時更新されないという」統計を少しでも変化させることを目標とします。よろしくご尽力のほどお願いいたします。

なお、個人的な事情により、私の記事は原則
<この項は書きかけです。順次追記します。>
随時更新という方針は取っていません。ごめんなさい。

【随時更新】Advent Calendar 2022 は、投稿させていただくつもりです。

よろしくお願いします。

# 参考資料

新しい記事７割、過去記事更新３割。

https://qiita.com/kaizen_nagoya/items/82138c13d957dd1300af

Countdown  Calendar2022基本方針

https://qiita.com/kaizen_nagoya/items/02110550936ca544b116

Countdown  Calendar 2022 計画と記録

https://qiita.com/kaizen_nagoya/items/5fba58b2672f543f7dd5

Countdown  Calendar 2022 tag

https://qiita.com/kaizen_nagoya/items/0f48e2a8402f40630976

FreeBSD Countdown Calender 2022記事を書き始める。

https://qiita.com/kaizen_nagoya/items/b169da9fdf0cb0a16253

DockerCountdown  Calendar 2021から2022に向けて

https://qiita.com/kaizen_nagoya/items/433e14ff290e515beede

 ＜この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。＞
cloud9でsamを利用しapiを作成する

## 手順
### codecommitにてレポジトリを作成する
作成方法は後日

### cloud9を作成する
作成方法は後日

### コマンドライン操作
```
$ sam init
```
この時作成されるファイルの紹介
**app.py**: lambdaの中身を記述するためのもの
**template.yaml**: cloudformtionの中身となるもの
**requirements.text**: importするライブラリを記入するもの

```
$ sam build --use-container
```
```
$ sam deploy -g
```
同じコンテナをビルドし直す場合は-gオプションは不要

### API GATEWAYからAPIを叩く
1. API GATEWAYのメニューバーからステージをクリック
1. URLの呼び出しをクリック
1. URLの末尾にパスを加える（template.yamlの後半の以下のコードのpath:を参照）
```
      Events:
        HelloWorld:
          Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api
          Properties:
            Path: /hello
            Method: get
```
【ABAP】SQL – データベースビューとCDSビューの違い

<!-- wp:paragraph -->S/4HANAの導入に携わると、CDSビューを目にする機会が多くなりますので、ここで少し触れておきます。

従来のABAPを拡張したABAP CDSがABAP7.40以降で提供されるようになりましたが、このABAP CDSを使って定義されたビューをCDSビューと呼びます。

CDSビューは、従来のABAPと同様にデータベースビューとして扱うこともできるし、Fioriアプリで分析用クエリを生成できるなど幅広い用途で使われます。

また、技術的にも覚えることが多く、私自身が大して知識を持ってないため、ここではデータベースビューと同様の使い方をする場合に特化して、CDSビューの特徴や従来のデータベースビューとの違いを書いていきます。

## データベースビューについて

複数のテーブルを指定の条件キーで結合したものをビューと呼びますが、その中でも通常の透過テーブルと同様にSE16でデータ照会をできたり、SELECT処理でデータ取得をできるのがデータベースビューです。

標準でも多数提供されていますが、例えばこんなのがあります。

![](https://sapmemo.com/wp-content/uploads/2020/08/image-5-1024x280.png)SE11で見たときに、データベースビューと表示されています。

## CDSビューについて

上でも書いたように、ABAP CDSで実装されたビューがCDSビューです。

CDSビューはSAP GUIからは実装不可で照会のみ可能です。実装はHANA STUDIOとかEclipseなどの外部開発環境を使用しなければなりません。

SE11から見た場合の画面はこんな感じです。

![](https://sapmemo.com/wp-content/uploads/2020/08/image-6-1024x654.png)DDL SQLビューと表示されているものがCDSビューです。実体はDDL Sourceに表示された名称をダブルクリックすると照会できます。

「RIS_DDL_TADIR」をダブルクリックすると、

![](https://sapmemo.com/wp-content/uploads/2020/08/image-7-1024x654.png)実体であるソースコードを照会できます。

このビューは2つのテーブル（DDDDLSRCとTADIR）を内部結合してますが、JOINの書き方がGUIで実装するABAPとは異なるので、実装する際は標準のCDSビューを参考にしてください。

![](https://sapmemo.com/wp-content/uploads/2020/08/image-9-1024x584.png)
## データベースビュー/CDSビューの探し方

SE11から探すことができます。

ビューの検索ヘルプから詳細を展開して、DBビューにチェックを入れて検索すると、データベースビュー、もしくはCDSビューが検索されます。

それ以上は検索できないので、SE11で照会して確認してください。

![](https://sapmemo.com/wp-content/uploads/2020/08/image-10.png)
## データベースビューとCDSビューの違い

ざっくりと表にまとめてみます。

|  | データベースビュー | CDSビュー |
|---|-----------------------------|--------------|
| 内部結合（INNER JOIN） | ○ | ○ |
| 外部結合（OUTER JOIN） | × | ○ |
| ロジック実装 | × | ○ |
| SAP GUIで実装 | ○ | × |
| SAP GUIで照会 | ○ | ○ |
| Eclipseで実装 | ○ | ○ |

データベースビューはテーブルと結合条件を指定すれば内部結合によるプログラムが自動生成されていたのでABAPを知らなくても実装できましたが、

CDSビューはプログラムを自分で書かないと実装できないので、開発の知識が必要とされる技術になりました。

## まとめ

データベースビューと比較すると、CDSビューはプログラムの知識がある人向けのオブジェクトになった一方で実装の自由度は高まりました。

S/4 HANAの導入プロジェクトでは、Fioriアプリを作る場合、従来のSAP GUIのアプリを作る場合のいずれにおいてもCDSビューを使う機会は出てきます。

CDSビューでできることや実装するロジックの詳細をいずれ勉強して載せていきたいと思っていますが、今はまだ大した知識がないのでまた改めて。
Git BashでAWS CLI使用時、MFA認証のプロンプトが表示されない

## 事象
Git BashにてAWS CLI使用時にMFA認証が起動した際、打ったコマンドが処理中のまま止まってしまう。
もしくは、Bashアプリ自体がフリーズしてしまう。（エラーとかは出ない）

【発生例】
スイッチロール先アカウントのリソースをCLIでごにょごにょしたいとき。

## 解決方法
下記サイトを参考にした。
[GitBash not prompting for MFA in AWS CLI](https://kerneltalks.com/tips-tricks/gitbash-not-prompting-for-mfa-in-aws-cli/)

【手順】
1. git bashアプリファイルの保存先を開く
2. 「Git Bash」ファイルを右クリック
3. 「プロパティ」押下
4. 「ショートカット」タブ押下
5. 「リンク先」を下記のように変更する

```
変更前
"C:\Program Files\Git\git-bash.exe" --cd-to-home

変更後
"C:\Program Files\Git\bin\bash.exe" --cd-to-home
```

## 備考
コマンドプロンプトの方は一発でいけたので、宗教上Bashしか使えない人以外はそっち使う方が早い（）
【Kotlin】バーグ・ザッカーマーク

## 元ネタ

https://qiita.com/mattn/items/e5dc5cdaed97128b5ad6

## シャッフルする文字をあらかじめ抜き出しておいて、残りの文字のテンプレートに埋め込む方法

```Kotlin
fun main() {
    "マクザカバグ"
        .toList()
        .shuffled()
        .let { "${it[0]}ー${it[1]}・${it[2]}ッ${it[3]}ー${it[4]}ー${it[5]}" }
        .also { println(it) }
}
```

半手動という感じ。


## 偶数インデックスの文字だけシャッフルする方法

```Kotlin
fun main() {
    "マーク・ザッカーバーグ"
        .map { "$it" } // CharSequence を List<String> に変換する。
        .let { it + "" } // 要素数が偶数になるように、List<String> の末尾に空文字列を加える。
        .withIndex()
        .partition { (index, _) -> index % 2 == 0 } // 偶数インデックスの要素と奇数インデックスの要素に分ける。
        .let { (evens, odds) -> evens.shuffled() zip odds }
        .flatMap { it.toList() }
        .joinToString("") { it.value }
        .also { println(it) }
}
```

要素数を偶数にしないと `zip` で最後の1つが無視されてしまうため、
最初に各文字（`Char`）を文字列（`String`）にして最後に空文字を追加している。
（奇数の場合だけ追加、とすべきだろうが、今回は省略した。）

`withIndex` するのはいいが、`IndexedValue` になった値から元の値を取り出す（`it.value` ）のが後の方になっているのでわかりにくい（`partition` の直後にやってもいいが、2つの `List` に対して行わなければならないので冗長になる）。
`partition` 関数にも `filterIndexed` 関数のような、predicate にインデックスがついてくるものが欲しい。

`partition` ではなく `filterIndexed` を使うと次のようになる。

```Kotlin
fun main() {
    "マーク・ザッカーバーグ"
        .map { "$it" }
        .let { it + "" }
        .let {
            it.filterIndexed { index, c -> index % 2 == 0 } to
                    it.filterIndexed { index, c -> index % 2 != 0 }
        }
        .let { (even, odd) -> even.shuffled() zip odd }
        .flatMap { it.toList() }
        .joinToString("")
        .also { println(it) }
}
```

`filterIndexed` がほぼ同じ引数で2回出てくるのが冗長だが、`partition` 版より読みやすいか。

## 文字列のスワップを使う方法

```Kotlin
fun main() {
    val original = "マーク・ザッカーバーグ"
    val replacingIndex = original.indices.step(2).toList() // -> [0, 2, 4, 6, 8, 10]
    buildString {
        append(original)

        (replacingIndex zip replacingIndex.shuffled()).forEach { (from, to) ->
            val fromChar = this[from]
            val toChar = this[to]
            this[from] = toChar
            this[to] = fromChar
        }
    }.also { println(it) }
}
```

ワンライナーにはできないのでこんな感じで。

`String` に、指定されたインデックスの文字を入れ替える関数さえあれば、一応ワンライナー（1文）にできる。

```Kotlin
fun main() {
    "マーク・ザッカーバーグ".let {
        it to it.indices.step(2).toList()
    }.let { (original, replacingIndexes) ->
        (replacingIndexes zip replacingIndexes.shuffled())
            .fold(original) { str, (from, to) ->
                str.swapped(from, to)
            }
    }.also { println(it) }
}

/** 指定されたインデックスの文字を入れ替える。 */
fun String.swapped(atA: Int, atB: Int): String =
    StringBuilder(this).also {
        val charA = it[atA]
        val charB = it[atB]
        it[atA] = charB
        it[atB] = charA
    }.toString()
```



／続くかも
【SAPトライアル環境構築まとめ】目的別作業一覧

<!-- wp:paragraph -->これまで紹介した10個のトライアル環境構築作業について、

1. Fioriの画面開発をしたい人向け
2. Eclipseで開発をしたい人向け
3. SAP GUIで開発をしたい人向け

の3つの目的別に分類してまとめましたので参考にしてください。

## 開発ツールで何ができるか

作業内容をまとめる前に、各種開発ツールで何の開発ができるのかをまとめておきます。

|  | Web IDE | Exlipse | SAP GUI |
|---|---------|---------|---------|
| Web画面 | ○ | × | × |
| Report | × | ※1 | ○ |
| Dynpro | × | × | ○ |
| テーブル | × | ○ | ○ |
| データベースビュー | × | ○ | ○ |
| CDSビュー | × | ○ | ※2 |
| クラス | × | ○ | ○ |
| 汎用モジュール | × | ○ | ○ |

※1：SAPサーバに接続すれば可能
※2：照会のみ可能WEB画面はWeb IDE、SAPの画面（Dynpro）を伴うABAP開発はGUI、SAP画面を伴わないABAP開発はEclipse、GUIの両方で開発可能です。

## Fioriの画面開発をしたい人向け

１．Pユーザの登録

http://sapmemo.com/puser/ 

２．SAP Cloud Platformアカウント作成

http://sapmemo.com/scp/ 

３．Web IDEの設定

http://sapmemo.com/webide/ 

## Eclipseで開発をしたい人向け

１．Pユーザの登録

http://sapmemo.com/puser/ 

２．SAP Cloud Platformアカウント作成

http://sapmemo.com/scp/ 

３．SAPインスタンス作成（クラウド版）

http://sapmemo.com/sap-cloud/ 

４．開発環境（Eclipse）のインストール

http://sapmemo.com/eclipse/ 

５．SAPインスタンスへの接続

http://sapmemo.com/connect-scp/ 

## SAP GUIで開発をしたい人向け

１．Pユーザの登録

http://sapmemo.com/puser/ 

２．SAPサーバの構築（前半）

http://sapmemo.com/sapserver1/ 

３．SAPサーバの構築（後半）

http://sapmemo.com/sapserver2/ 

４．SAP GUIのインストール

http://sapmemo.com/installgui/ 

５．SAP GUIで開発環境にログイン

http://sapmemo.com/login/ 

こんな感じです。

Pユーザの登録は何をするにも必須、あとは適宜必要な部分を参考にしてください。
githubのスター数の一覧を取得するスクリプト

# 背景
githubのリポジトリのスター数を色々比較して見たかったので出力できるスクリプトを作ってみた。

# 実行方法
## 事前準備
- inファイルを用意しておく
    - 対象リポジトリ名一覧を記述
- .envファイルを用意しておく
    - GITHUB_TOKENを定義
## 実行
```console
$ yarn add ygor @octokit/core fs readline dotenv
$ node task.js output_star
```

# コード
https://gist.github.com/tashua314/3ecdfb83b5aa4a924c1209471c00ef42
```javascript:task.js
/**
 * `https://github.com/{owner}/{repo}` のownerとrepoの情報をまとめたファイルを読み込み、
 * スター数一覧を追記したファイルを出力する。
 *
 * # 実行例
 * node task.js output_star
 *
 * # inファイル例
 * ```
 * facebook/react
 * vuejs/vue
 * jquery/jquery
 * ```
 *
 * # outファイル例
 * ```
 * facebook/react	190187
 * vuejs/vue	197000
 * jquery/jquery	56371
 * ```
 * */
const ygor = require("ygor");
const { Octokit } = require("@octokit/core");
const fs = require('fs');
const readline = require("readline");
require('dotenv').config();

const IN_FILE_NAME = 'in';
const OUT_FILE_NAME = 'out';

// arg._[0]: 読み込みファイルパス
// 未設定の場合はIN_FILE_NAMEがデフォルト
async function output_star(arg) {
  const octokit = new Octokit({
    // .envファイルのGITHUB_TOKENにトークン設定
    auth: process.env.GITHUB_TOKEN
  })

  const reader = _getReader(arg);

  await reader.on('line', async (record) => {
    let [owner, repo] = record.split('/');
    res = await octokit.request('GET /repos/{owner}/{repo}', {
      owner: owner,
      repo: repo
    });
    let tmp = [];
    // リポジトリ名
    tmp.push(record);
    // スター数
    tmp.push(res['data']['stargazers_count']);
    // 詳細
    // tmp.push(res['data']['description']);
    const str = tmp.join('\t');
    console.log(str);
    // ファイル出力
    fs.appendFile(OUT_FILE_NAME, str+'\n', (err) => {
      if (err) throw err;
    });
  });
}

function _setFile(arg) {
  if (arg._[0]){
    return arg._[0];
  } else {
    return IN_FILE_NAME;
  }
}

function _getReader(arg) {
  const stream = fs.createReadStream(_setFile(arg));
  return readline.createInterface({ input: stream });
}

// コマンドの登録 ygor.task(コマンド名, 実行する関数)
// owner, repoの一覧を受け取り、starの一覧を返す
ygor.tasks.add("output_star", output_star);
```

# Editor's Note
スクリプトを書きたい時はたいていpythonかrubyで書いてたけど、最近のnodeはCUIで実行時に結果やオブジェクトのメソッド一覧とかを表示してくれるのね！
めっちゃ便利になっててびっくり！！

js系は流れ早すぎてあまりキャッチアップしてなかったけど、そろそろ触っていこうかなー。

というか、事業コンテンツ考えたり営業活動しようとしていたはずなのにふと横道それてスクリプト組んだりしてたらあっという間に時間が過ぎてたという罠（）
【SAPトライアル環境構築⑩】SAP GUIで開発環境にログイン

<!-- wp:paragraph -->SAP GUIのインストールまで終われば、あとは利用できるように設定していくだけです。

ここでは、SAP GUIの設定からログイン、開発作業ができるまでの設定手順を載せていきます。

## SAP GUIの初期設定

１．SAP GUIを起動

２．「追加」⇒「新規アイテム」をクリック

![](https://sapmemo.com/wp-content/uploads/2020/06/image311-wpp1596721332877.png)３．「ユーザ指定システム」を選択して「次画面」をクリック

![](https://sapmemo.com/wp-content/uploads/2020/06/image312-wpp1596721402261.png)４．開発環境のシステム接続パラメータを入力して「完了」をクリック

![](https://sapmemo.com/wp-content/uploads/2020/06/image313-wpp1596721478477.png)入力値は下記の通りです。

| 内容説明 | 任意の名前 |
|--------------|-----------------|
| アプリケーションサーバ | 127.0.0.1 |
| インスタンス番号 | 00 |
| システムID | NPL |

## SAPサーバ起動

１．Virtual Boxで仮想マシンを起動

２．「Activities」から「Xterm」を実行

検索バーに「x」と入力すれば先頭に表示されます。

![](https://sapmemo.com/wp-content/uploads/2020/08/image6-wpp1596722886836-1.jpg)３．「su npladm」と入力してEnter押下

![](https://sapmemo.com/wp-content/uploads/2020/08/image7-wpp1596722947560.png)４．仮想マシンのログインパスワードを入力してEnter押下

![](https://sapmemo.com/wp-content/uploads/2020/08/image8-wpp1596723086500.png)５．「startsap all」と入力してEnter押下

![](https://sapmemo.com/wp-content/uploads/2020/08/image9-wpp1596723064858.png)６．開始メッセージが表示されればサーバ起動完了

![](https://sapmemo.com/wp-content/uploads/2020/08/image5-wpp1596723259289.png)## 開発環境へのログイン

１．SAP GUIで開発環境名をダブルクリック

![](https://sapmemo.com/wp-content/uploads/2020/06/image321-wpp1596723394801.png)２．ログイン情報を入力してEnter押下

![](https://sapmemo.com/wp-content/uploads/2020/06/image325-wpp1596723457471.jpg)ログイン情報は下記の通りです。

| クライアント | 001 |
|--------------------|-----|
| ユーザID | DEVELOPER |
| パスワード | Down1oad |

## 開発者ライセンス取得

１．開発環境にログイン

２．T-CD：SLICENSEを実行

![](https://sapmemo.com/wp-content/uploads/2020/06/image326-wpp1596853348250-1024x671.jpg)２．Active Hardware Keyをコピー

![](https://sapmemo.com/wp-content/uploads/2020/08/image12-wpp1596853691685.png)３．下記URLにアクセス

[https://go.support.sap.com/minisap/#/minisap](https://go.support.sap.com/minisap/#/minisap)

４．NPL - SAP NetWeaver 7.x (Sybase ASE)を選択

![](https://sapmemo.com/wp-content/uploads/2020/06/image327-wpp1596853903849-1024x297.png)５．必要情報を入力し、「Generate」をクリック

![](https://sapmemo.com/wp-content/uploads/2020/08/image13-wpp1596854017849-1024x417.png)以下のファイルが作成されます。

![](https://sapmemo.com/wp-content/uploads/2020/06/image329.png)６．SLICENSEの画面からライセンスファイルをインストール

「Install New License」ボタンをクリックし、先ほどダウンロードしたライセンスファイルを選択します。

![](https://sapmemo.com/wp-content/uploads/2020/06/image332-wpp1596854278222.png)７．正常メッセージが表示されればインストール完了

![](https://sapmemo.com/wp-content/uploads/2020/06/image333.png)８．ライセンスの有効期間が表示される

有効期間は3か月です。

![](https://sapmemo.com/wp-content/uploads/2020/08/image12-wpp1596854570675.png)９．開発環境に再ログイン

ライセンスの有効期限が表示されます。

![](https://sapmemo.com/wp-content/uploads/2020/06/image334-1024x750.png)以上で、SAP開発環境が使えるようになりました。SE38やSE11等で開発の検証はできますが、使えるトランザクションは限られています。

開発者エディションですので、そこは仕方ないですね。会計伝票や入出庫伝票、販売伝票などのトランザクションデータの登録はできませんし、各種マスタデータの登録もできません（T-CDや各種テーブルが存在しない）。

デモプログラムで使用されるSFLIGHT等はデータが入った状態で用意されてますので、そういったデータを使ってプログラムの検証をすることはできますので、自宅でABAP検証をしてみたい人は使ってみてください。
【SAPトライアル環境構築⑨】SAP GUIのインストール

<!-- wp:paragraph -->トライアル環境用のSAP GUIのインストール手順を載せます。

ここは特に難しいことはありません。

## SAP GUIのインストール

１．ABAPファイルが入ったフォルダ内のZIPファイルを解凍する

![](https://sapmemo.com/wp-content/uploads/2020/08/image4-1-wpp1596360816425-1024x124.png)添付画面のclientフォルダは[こちらの投稿](https://sapmemo.com/sapserver1/#3-4)の画面にあるclientフォルダです。

２．解凍したフォルダの奥に進み「SetupAll.exe」を実行する

![](https://sapmemo.com/wp-content/uploads/2020/06/image304-wpp1596361397232.png)解凍したフォルダ以降のパス

50144807_6\\BD_NW_7.0_Presentation_7.50_Comp.*2*\\PRES1\\GUI\\WINDOWS\\Win32

![](https://sapmemo.com/wp-content/uploads/2020/06/image305-wpp1596361347135-1024x563.png)３．「Next」をクリック

![](https://sapmemo.com/wp-content/uploads/2020/06/image306-wpp1596361526513.jpg)４．SAP GUI for Windows 7.50にチェックを入れて「Next」をクリック

![](https://sapmemo.com/wp-content/uploads/2020/06/image307-wpp1596361588306-1.jpg)５．「Next」をクリック

![](https://sapmemo.com/wp-content/uploads/2020/06/image308-wpp1596361663921-1.jpg)６．正常メッセージが出れば完了

Closeをクリックして画面を閉じてください。

![](https://sapmemo.com/wp-content/uploads/2020/06/image310-wpp1596361734496.jpg)SAP GUIのインストールは以上です。GUIの設定手順については次回更新します。
Shopify 配送料金の設定 条件の書き方

Shopify では配送料を重量もしくは注文額に基づいて設定することができます。

「`0kgから2kgまでを300円` `2kgから4kgを500円`とした際に `2kg` が被ってしまいます！どうしましょう！？」と焦った顔で聞かれて~~つい笑ってしまったので~~この辺のことを記事として残しておきます。

## 条件が被った場合の挙動
条件が被った場合は**価格の安い配送料**が優先されます。

|最小重量 |最大重量 |金額  |
|---|---|---|
|0kg |2kg |300円|
|2kg |4kg |500円|
|4kg |8kg |700円|

上記の表は
0,000g ~ 2,000g => 300円
2,001g ~ 4,000g => 500円
4,001g ~ 8,000g => 700円
と同義です。

また、少数も受け付けますのでグラム単位で設定したい場合は `0.5kg` のような書き方ができます。

## 最小重量は書かなくて良いです
例えば [EMS(国際スピード郵便)](https://www.post.japanpost.jp/int/charge/list/ems_all.html) の料金表を入力するのは結構手間ですよね。

|最小重量 |最大重量 |金額  |
|---|---|---|
|0.0kg |0.5kg |1,450円|
|0.5kg |0.6kg |1,600円|
|0.6kg |0.7kg |1,750円|
|… |… |…|
|29kg |30kg |26,600円|

…なんて設定していくと結構大変です。

|最小重量 |最大重量 |金額  |
|---|---|---|
|0kg |0.5kg |1,450円|
|0kg |0.6kg |1,600円|
|0kg |0.7kg |1,750円|
|… |… |…|
|０kg |30kg |26,600円

価格の安い配送料が優先されるため、**重さに比例して価格が上がる場合**は最小重量を省略できます。

## 最後に
重さで料金が決まる場合は、基本的には `???g まで ???円` のように設定されており、重さに比例して価格が上がるので上記のような書き方で大丈夫ですが、例外があった際は素直に g(グラム) 単位で設定するのがよいでしょう。（例：800g を設定したい場合は 0.8kg と記入する）
【SAPトライアル環境構築⑥】Web IDEの設定

<!-- wp:paragraph -->今回はWeb IDEの設定をしていきます。Web IDEとはブラウザベースの開発ツールで、以前のプロジェクトではFioriの画面作成に使用していました。

オンライン版（SAPインスタンスへの接続あり）とローカル版（ネットワーク接続不要）の2種類があるので両方載せておきます。

## オンライン版

１．下記URLからトライアル環境に接続

[https://cockpit.hanatrial.ondemand.com/cockpit#/home/trial](https://cockpit.hanatrial.ondemand.com/cockpit#/home/trial)

![](https://sapmemo.com/wp-content/uploads/2020/06/image17-wpp1595684198156-1024x563.png)２．「SAP Web IDE」をクリック

![](https://sapmemo.com/wp-content/uploads/2020/06/image17-wpp1595684352777-1024x563.png)３．この画面が表示されれば完了

![](https://sapmemo.com/wp-content/uploads/2020/07/image342-wpp1595684630551-1024x522.png)オンライン版は以上です。トライアル環境のSAPインスタンスを作成済であれば特別な設定は不要で使えます。

## ローカル版

１．JAVAの公式サイトからJAVA 8をダウンロード

[https://java.com/ja/download/](https://java.com/ja/download/)

![](https://sapmemo.com/wp-content/uploads/2020/07/image343-1024x755.png)２．ダウンロードしたファイルをインストール

![](https://sapmemo.com/wp-content/uploads/2020/07/image344.png)３．SAP公式サイトから開発ツールをダウンロード

[https://tools.hana.ondemand.com/#sapui5](https://tools.hana.ondemand.com/#sapui5)

使用OSに応じたファイルを選択

![](https://sapmemo.com/wp-content/uploads/2020/06/image97-wpp1595686978324-1024x538.png)４．ダウンロードファイルを解凍

※絶対にWindows標準の解凍（右クリック→すべて展開）は実行しないでください。時間がかかる（3時間くらい）上に必要なファイルが展開されない問題があるので。

私は7-Zip（https://forest.watch.impress.co.jp/library/software/7zip/）で解凍しました。かかった時間は3分程度でした。

![](https://sapmemo.com/wp-content/uploads/2020/06/image100-wpp1595687382695.png)- ![](https://sapmemo.com/wp-content/uploads/2020/06/image99.png)
- ![](https://sapmemo.com/wp-content/uploads/2020/06/image102.png)

左：Windows標準の解凍ツール使用 ／ 右：7-Zip使用左右でファイルの数が違うのがわかりますね。重要なorion.exeファイルがWindows標準では抽出されないので使えません。

５．orion.exeファイルを実行

※この画面はWeb IDE（ローカル版）を使用中は閉じないでください

![](https://sapmemo.com/wp-content/uploads/2020/06/image108-1024x534.png)６．ローカルホストに接続

ブラウザのアドレスバーに以下の接続先を入力してください。

接続先：localhost:8080/webide/index.html

この画面が出ればOKです。

![](https://sapmemo.com/wp-content/uploads/2020/07/image345-1024x614.png)７．Web IDE（ローカル版）用のユーザIDを作成

![](https://sapmemo.com/wp-content/uploads/2020/07/image345-wpp1595688309507-1024x614.png)８．作成したユーザIDでログイン

![](https://sapmemo.com/wp-content/uploads/2020/07/image345-wpp1595688425392-1024x614.png)９．これで完了です。

![](https://sapmemo.com/wp-content/uploads/2020/07/image346-1024x495.png)ローカル版のメリットは、必要なファイルを入れておけばスタンドアロンのPCでも使用できることです。出先でちょっと動作確認したい場合にいつでもどこでもコードを書けるのはうれしいですね。

以上でWeb IDE使用手順の説明は終わりです。次回はSAP GUIを使えるようにしていきます。
【SAPトライアル環境構築⑤】SAPインスタンスへの接続

<!-- wp:paragraph -->EclipseでABAP開発するために必要な作業は今回で最後です。

それでは早速手順を載せていきます。

## ABAP Cloud Projectの作成

１．Eclipseを起動する

２．「New」→「Project」をクリック

※次で選択する「ABAP Cloud Project」がここに表示されていれば選択しても良いです

![](https://sapmemo.com/wp-content/uploads/2020/06/image54-1024x648.jpg)３．「ABAP Cloud Project」を選択→「Next」をクリック

![](https://sapmemo.com/wp-content/uploads/2020/06/image55-wpp1595338624912.png)４．「Service Key」を選択して「Next」をクリック

![](https://sapmemo.com/wp-content/uploads/2020/06/image56-wpp1595338686162.png)５．「Import」をクリック

![](https://sapmemo.com/wp-content/uploads/2020/06/image57-wpp1595338772275.png)６．ファイル選択ダイアログでJSONファイルを指定

![](https://sapmemo.com/wp-content/uploads/2020/06/image58.png)※JSONファイルはこちらでダウンロードしたものを取り込んでください。

[【SAPトライアル環境構築③】SAPインスタンス作成（クラウド版）](https://sapmemo.com/sap-cloud/#2-6)

７．サービスキーの表示を確認して「Next」をクリック

![](https://sapmemo.com/wp-content/uploads/2020/06/image59-wpp1595340025747.png)８．Pユーザ用のメールアドレスとパスワードを入力してログオン

![](https://sapmemo.com/wp-content/uploads/2020/06/image61-wpp1595340115529.png)９．この画面が表示されたら別の画面に切り替わるまで待機

![](https://sapmemo.com/wp-content/uploads/2020/06/image70.png)１０．ユーザ情報が表示されたら「Next」をクリック

言語JAは指定できません。

![](https://sapmemo.com/wp-content/uploads/2020/06/image62-wpp1595340827332.png)１１．「Finish」をクリック

こだわりがなければ初期値のまま終了して問題ありません。

パッケージ「ZLOCAL」にはオブジェクトの追加ができないので、別のパッケージを作る必要があります。

![](https://sapmemo.com/wp-content/uploads/2020/06/image64-wpp1595340973602.png)１２．チェックを入れて「Open Perspective」をクリック

![](https://sapmemo.com/wp-content/uploads/2020/06/image66-wpp1595341086996.png)１３．「Workbench」をクリック

![](https://sapmemo.com/wp-content/uploads/2020/06/image68-wpp1595341221309-1024x655.png)１４．SAPインスタンスへの接続が確認できます

![](https://sapmemo.com/wp-content/uploads/2020/06/image69-1024x658.png)これでEclipseでABAP開発ができるようになりました。SAP GUIをインストールしないとレポートプログラムやDynproの開発はできませんが、クラス、汎用モジュール、テーブルなどは開発できまし、新しい技術であるCDSビューも開発できます。

次回以降で、SAP GUIとWeb IDEのトライアル環境構築の手順を紹介します。
【SAPトライアル環境構築③】SAPインスタンス作成（クラウド版）

<!-- wp:paragraph -->ここでは開発に必要なSAPインスタンスを作成していきます。統合開発環境であるEclipseでCDSビューやクラスなどクラウド関連機能の開発をするためには必須の作業です。

ちなみに、GUIでレポートプログラムやDYNPROなどを開発したい場合は、このページの作業は不要で、別途GUIのインストールが必要です。

それでは、SAPのインスタンス作成と、インスタンス情報をJSONファイルに出力するまでの手順を載せていきます。

## SAPインスタンス作成

１．下記URLからトライアル環境にログイン

[https://cockpit.hanatrial.ondemand.com/cockpit#/home/trial](https://cockpit.hanatrial.ondemand.com/cockpit#/home/trial)

![](https://sapmemo.com/wp-content/uploads/2020/06/image17-1024x563.png)２．「trial」をクリック

![](https://sapmemo.com/wp-content/uploads/2020/06/image22-wpp1595048835896-1024x494.png)３．「dev」をクリック

![](https://sapmemo.com/wp-content/uploads/2020/06/image23-wpp1595049129784-1024x498.png)４．「サービスマーケットプレイス」をクリック

![](https://sapmemo.com/wp-content/uploads/2020/06/image24-wpp1595049220722-1024x438.png)５．「ABAP Trial」をクリック

![](https://sapmemo.com/wp-content/uploads/2020/06/image25-wpp1595049326912-1024x631.png)６，「インスタンス」をクリック

![](https://sapmemo.com/wp-content/uploads/2020/06/image26-wpp1595049388682-1024x540.png)７．「新規インスタンス」をクリック

![](https://sapmemo.com/wp-content/uploads/2020/06/image27-wpp1595049455894-1024x514.png)８．「次」へ進む

 リストボックスを展開しても何も選択肢はありません。

![](https://sapmemo.com/wp-content/uploads/2020/06/image30-wpp1595049723277-1024x652.png)９．メールアドレスを入力して「次」へ進む

[Pユーザ登録](https://sapmemo.com/puser/)時に指定したメールアドレスを使用してください。

適当な（存在しない）アドレスを入力しても先には進めますが、EclipseでSAPインスタンスにアクセスする際に権限チェックの無限ループが発生して続行不可能になってしまいます。

![](https://sapmemo.com/wp-content/uploads/2020/06/image28-wpp1595049824798-1024x652.png)１０．「次」へ進む

![](https://sapmemo.com/wp-content/uploads/2020/06/image29-wpp1595049529558-1024x650.png)１１．インスタンス名を入力して「終了」をクリック

![](https://sapmemo.com/wp-content/uploads/2020/06/image31-wpp1595050252552-1024x652.png)１２．入力したインスタンス名が一覧に表示されていれば完了です

![](https://sapmemo.com/wp-content/uploads/2020/06/image32-wpp1595050324183-1024x411.png)## インスタンス情報の出力

１．上で作成したインスタンス名をクリック

![](https://sapmemo.com/wp-content/uploads/2020/06/image32-wpp1595050324183-1024x411.png)２．「サービスキー」をクリック

![](https://sapmemo.com/wp-content/uploads/2020/06/image33-wpp1595050897601-1024x345.png)３．「サービスキー作成」をクリック

![](https://sapmemo.com/wp-content/uploads/2020/06/image34-wpp1595050954573-1024x290.png)４．任意の名前を入力して「保存」をクリック

![](https://sapmemo.com/wp-content/uploads/2020/06/image35-wpp1595051048606.png)５．ダウンロードボタンをクリック

![](https://sapmemo.com/wp-content/uploads/2020/06/image36-wpp1595051625535-1024x488.png)<a id="2-6"></a>６．これでインスタンス情報のダウンロードが完了です

※画面はChromeで取ってます。左下にファイルが表示されないブラウザもあるので、その場合はファイル出力先のフォルダにファイルが存在するか確認してください。

![](https://sapmemo.com/wp-content/uploads/2020/06/image37-wpp1595051686998.png)以上でSAPインスタンス作成が完了です。

ここで作成したインスタンス情報を統合開発環境（Eclipse）に取り込むことで開発ができるようになりますが、それは次回載せることにします。
Photon OS を VSCode が動く開発環境にしよう！

Photon OS は、クラウド環境に最適化された非常に軽量でミニマリストな Linux OS です。

簡単ですが、こちらの記事の冒頭で、Photon OS について紹介をしてます。

https://qiita.com/iwaseyusuke/items/7b2a76f4538df93ba792

非常にシンプルな OS ながら、簡単にデプロイできるので、K8s のクライアントとして、kubectl を叩くための VM としては、とても重宝しています。

しかし、シンプルが故に、ゴリゴリの開発環境として使うには、少し扱いづらい部分もあります。
ただ、VSCode が使えたとして、「ちょっとログを読みたいな」「ちょっと Dockerfile を書きたいな」という場面はあると思います。
そんな時に、VSCode の [Remote - SSH](https://code.visualstudio.com/docs/remote/ssh) の拡張機能を使って、遠隔の Photon OS 上のファイルを VSCode で編集できると、とても幸せになれるので、今回はその方法をご紹介します。



## 前提

Photon OS がデプロイ済みであり、最低限の設定として、こちら↓のあたりが行われている想定で、手順を記載しています。

https://qiita.com/iwaseyusuke/items/ef56cd5b2c59ff757fa2

また、執筆時点で、Photon OS は ver 4.0 を利用しています。

```sh
# cat /etc/photon-release
VMware Photon OS 4.0
PHOTON_BUILD_NUMBER=2f5aad892
```

VSCode の方も、Remote - SSH の拡張機能をインストールしておいてください。

https://code.visualstudio.com/docs/remote/ssh

## 依存パッケージのインストール

VSCode が Remote - SSH で、遠隔の Linux OS にアクセス後、内部では、必要なファイルをダウンロードし、何かをビルドしているようで、下記のパッケージがインストールされていないと、接続後にエラーとなってしまいました。
そこで、あらかじめ依存パッケージを Photon OS にインストールしておきます。

```sh
tdnf install -y tar build-essential ca-certificates curl wget
```

## sshd コンフィグの変更

VSCode の Remote - SSH では、SSH のポートフォワーディングを使っているようで、接続先のリモートホストで、この機能が有効になっている必要があります。
しかし、Photon OS では、セキュリティの観点から、この機能がデフォルト無効になっているため、これを有効にしておきます。 

まず、`vi` で `sshd_config` を開き

```sh
vi /etc/ssh/sshd_config
```

下記の部分を編集して、保存します。

```text:/etc/ssh/sshd_config
# !!注意!!
# ファイルの下の方に AllowTcpForwarding no が設定されているため、
# その行は削除 or コメントアウトした上で、下記を追記してください！
AllowTcpForwarding yes
PermitOpen any
```

少しだけ、設定の意味を記載しておくと、`AllowTcpForwarding yes` で TCP ベースのポートフォワーディングを有効にしています。
また、その転送先に関しては、`PermitOpen host:port` で、転送先を絞ることができます。しかし、ここでは簡単のため、特に制限を設けず、任意のホストへの転送を許可しています。もし、よりセキュアに環境を構築する必要がある場合には、この設定を使うことで、アクセスできる端末を制限することができます。

最後に、`sshd_config` を編集しているので、`sshd` を再起動させて、設定を反映させます。

```sh
systemctl restart sshd
```

## 接続先の設定

例えば、Mac 上で、下記のように、SSH 接続の設定を入れておくと、VSCode 上に接続先の候補として表示されます。

```text:~/.ssh/config
Host           <接続先ホストのエイリアス名>
HostName       <接続先ホストの IP or FQDN>
User           <ユーザー名>
IdentityFile   <SSH 接続する際の秘密鍵で普通は ~/.ssh/id_rsa で良いはず>
# 踏み台がある場合には下記も追加
ProxyCommand   ssh -CW %h:%p <踏み台サーバーのエイリアス名>
```

## VSCode から接続

後は VSCode に Remote - SSH の拡張機能がインストールされていれば、[Remote Exproler] から接続したいホストを選択することで、遠隔の Photon OS 上のファイル/フォルダを、あたかもローカルにあるかのように開くことができます。
![Screen Shot 2022-06-21 at 22.56.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245234/a7999629-fe1a-8ab6-5656-7d5bd227fe19.png)
【SAPトライアル環境構築②】SAP Cloud Platformアカウント作成

<!-- wp:paragraph {fontSize:medium} -->今回このブログを立ち上げる大きなきっかけになった、Fioriの勉強のために必須の環境です。

クラウド関連の検証は不要で、GUIを使った開発の検証をしたい方は、このページの作業は不要です。

こちらも画面を使って手順を残しておきます。

## 操作手順

１．SAP公式サイトで「ソフトウェアの無料体験（[https://www.sap.com/japan/products/free-trials.html](https://www.sap.com/japan/products/free-trials.html)）」にアクセス

２．画面右上のログオンボタンをクリック

![](https://sapmemo.com/wp-content/uploads/2020/06/44d29d2792be3bad9a9ed98c7bbb20d6-1024x387.png)３．「ログイン」をクリック

![](https://sapmemo.com/wp-content/uploads/2020/06/image9-1024x828.png)４．ログインIDを入力して「続行」をクリック

![](https://sapmemo.com/wp-content/uploads/2020/06/image11-1024x620.png)５．パスワードを入力して「ログオン」をクリック

![](https://sapmemo.com/wp-content/uploads/2020/06/image12-1024x692.png)６．２の画面に戻る

![](https://sapmemo.com/wp-content/uploads/2020/06/44d29d2792be3bad9a9ed98c7bbb20d6-1024x387.png)７．画面を下にスクロールして、「データベースとデータ管理」⇒「SAP Cloud Platform」をクリック

![](https://sapmemo.com/wp-content/uploads/2020/06/image13.png)８．「トライアルにログオンする」をクリック

※添付画面でも「トライアルにログオンする」が3分の1くらい隠れてますが、ディスプレイの解像度やモニタの大きさなどによっては完全に隠れてる場合があります。その場合はブラウザの拡大率を変更してボタンが表示されるように調整してください。

![](https://sapmemo.com/wp-content/uploads/2020/06/image14-1024x632.jpg)９．2つともチェックを入れて「受け入れる」をクリック

![](https://sapmemo.com/wp-content/uploads/2020/06/image16-1024x716.png)１０．「トライアルアカウントを入力してください」をクリック

![](https://sapmemo.com/wp-content/uploads/2020/06/image17-1024x563.png)１１．アカウントのセットアップ処理が自動で動きます

![](https://sapmemo.com/wp-content/uploads/2020/06/image19.png)１２．「アカウントを作成」をクリック

![](https://sapmemo.com/wp-content/uploads/2020/06/image18.png)１３．「続行」をクリック

![](https://sapmemo.com/wp-content/uploads/2020/06/image20-wpp1593007727911.png)１４．SAP Cloud Platform Cockpitが表示されます

![](https://sapmemo.com/wp-content/uploads/2020/06/image21-1024x537.png)以上でアカウントの作成は完了です。

次は開発環境のインスタンス作成ですが、またの機会に載せることにします。
NatCorderを使ってハマった罠が深いようで浅かった

## 概要

つい最近NatCorderというアセットが無料化！？というニュースが一部界隈を騒がせました
(ただし最新版はサブスクリプション契約でしか使えないよ！)
NatCorderは画面収録のアセットでネイティブな実装がゴリゴリでパフォーマンスがサクサクのスーパークールなアセットです

- https://github.com/natmlx/NatCorder

これは早速使ってみるしかない！！ということで使った結果、見事に罠にハマったので
これから増えるであろう利用者のために備忘録として残しておきます
実装方法などはドキュメントが充実しているので解説しません

## 検証環境

- iPhone***6s***
- iOS 14

## 結論

使ってる端末がエンコードできるRecorderを利用しよう！！！

## 経緯

### 🤔NatCorderで動画（音有り）を撮るためのRecorderがある

- MP4Recorder
- HEVCRecorder

MP4とHEVCってなんだ？と思って調べてみたところ
なんかよくわからんけどHEVCがオススメらしい　Yahoo知恵袋に書いてたから間違いない
MP4はよく聞いた事あるけどHEVCってカッコいい響きだし玄人向けなんだろう

### 😄HEVCRecorderを使って画面収録をした

エディタでUnityRecorderを使ったことがある諸兄はわかると思うが画面収録をしながら実行すると結構重い
それが当たり前だと思ってたら、NatCorderの画面収録はエディタでの動作に何一つ影響を及ぼさない！！！
なんてすごいんだ！！録画もできてる！！！

### 💀iOSビルドをして実機での動作を見てみた

実行中も快適、流石に古い端末だから少しパフォーマンスに影響は出ているが問題のない範囲だった
脳内では勝利のBGMが流れていた
部屋には勝利の美酒も用意していた

保存ボタンを押そうとしたそのとき、端末は物言わぬホーム画面を映し出した
一体なにが起こったんだ…？

### 💀IMediaRecorder.FinishWritingで失敗している

エラーが起きた時に原因を調べるのはエンジニアの習性の一つなのでエンジニアの端くれとして
伝家の宝刀`Debug.Log`を使用してエラーが起きている箇所の原因を探ってみた

すると、画面収録したデータをエンコードしている部分でクラッシュしていることがわかった
ふむふむ、なるほどなるほど、つまり画面収録したデータをエンコードしている部分でクラッシュしているんだな

……？

### 💀なぜ？

パーミッションの確認に必要なものは全て設定済みだしOSバージョンも新しめだ
ドキュメントを見ても動作に必要な環境は満たしているように見える

https://docs.natml.ai/natcorder/preliminaries/requirements

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613274/57739fa8-35de-f926-f581-88892e970d9a.png)

### 😇調べまくり人に聞きまくりの結果、原因がわかった

```
iPhone6sってHEVCのエンコードに対応してたっけ？
```

ふむ `iPhone HEVC エンコード` 検索……
それっぽい記事があるぞ

https://support.apple.com/ja-jp/HT207022

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613274/8c2b48a7-5a38-0b0d-b661-b61cc7d6be9a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613274/2b91a04e-a44c-8b91-d6b4-e57d51cbfc66.png)

！！！！！！！

### 😄ということでiPhoneのデバイス世代で利用するRecorderを変えた

実機での動作検証をして無事に動画の保存に成功！！

## 終わりに

実機のログをよく見てみるとこんなエラーが出ていたけど何語かわからなかったのでスルーしていた
```
NatCorder Error: HEVCRecorder failed to finish writing with error Error Domain=AVFoundationErrorDomain Code=-11834 
```

`AVFoundationErrorDomain Code=-11834`で検索をかけるとこんなサイトが出てきた

https://docs.microsoft.com/en-us/dotnet/api/avfoundation.averror?view=xamarin-ios-sdk-12

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613274/54354b79-eb90-7c55-89b2-a6c2c3fe35aa.png)

`EncoderNotFound`

エラーコードをちゃんと読んで然るべき検索をすれば答えには辿りつけていたはずだった
エラーコードはしっかり読もう！！！！
【SAPトライアル環境構築－事前準備】Pユーザの登録

<!-- wp:paragraph -->SAPに携わっている人なら「Sユーザ」には馴染みがあるのではないでしょうか。

プロジェクトに参画するとOSSへのインスタンス登録に必須となる例のユーザIDのことですね。

会社員時代は私も個人のSユーザを持っていましたが、Sユーザはその会社に依存するため、退職とともに使えなくなってしましました。

個人でトライアル環境を準備しようとするとユーザIDが必要ですが、Sユーザを持っていない私は必然的にPユーザ（PublicのPらしい）を登録することになりました。

Pユーザの登録手順をメモとして残しておきます。

## PユーザとSユーザの違い

細かいことはわかりませんが、両者を使ってみて気づいたのは1点ですが、個人的には大きな違いであり残念ではあります。

- Pユーザ ・・・ SAP Note検索ができない
- Sユーザ ・・・ SAP Note検索ができる

ふと気になったときにNote検索ができると便利なんですが、仕方ないですね。

## Pユーザの登録手順

１．SAPコミュニティ（[https://community.sap.com/](https://community.sap.com/)）へ移動

２．「ログインサインアップ」をクリック

![](https://sapmemo.com/wp-content/uploads/2020/06/image1-1024x391.png)３．「Register」をクリック

![](https://sapmemo.com/wp-content/uploads/2020/06/image2-1024x869.png)４．メールアドレスなど必須情報を入力して「Register」をクリック

- ![](https://sapmemo.com/wp-content/uploads/2020/06/image3-1024x756.png)
- ![](https://sapmemo.com/wp-content/uploads/2020/06/image4-1024x879.png)

５．仮登録完了

![](https://sapmemo.com/wp-content/uploads/2020/06/image5-1024x587.png)６．４で登録したメールアドレスから本登録を実施

![](https://sapmemo.com/wp-content/uploads/2020/06/image6-1024x650.png)７．本登録完了、「Continue」をクリック

![](https://sapmemo.com/wp-content/uploads/2020/06/image7-1024x483.png)８．プロフィール公開可否の設定

SAPコミュニティでブログを投稿したい人は公開必須なので、左上のチェックをオンにして「Make My Profile Public」をクリックしてください。

公開したくない人は「Browse Anoymously」をクリックしてください。

![](https://sapmemo.com/wp-content/uploads/2020/06/image8-1024x567.png)以上です。

トライアル環境構築に向けて一歩前進しました。
Railsでのアプリケーション新規作成手順

# はじめに
初心者なりにまとめたものになりますので、諸先輩方からは何書いてんだおめえと感じる部分があると思います。
そう感じた際は、お手数ですが、コメント頂けると幸いです。


内容としては、 ***フォルダ作成からSequel Proへのデータベース作成までの手順***になります。

## 目次
- ***アプリケーション新規作成手順***
-アプリ作成場所
-rails newの実行
-アプリ名のディレクトリにいることを確認
-データベースを作成

## アプリ作成場所
- ***作成したい場所へファイルを作成***
私は、ホームディレクトリに"projects"という名前のフォルダを作っている。


## rails newの実行
ターミナルを立ち上げ、ホームディレクトリにいることを確認(`pwd`を実行)した後、下記のコマンドを実行

 #
    rails バージョン名 new アプリ名 -d db管理システム名

    例.
    rails _6.0.0_ new first_app -d mysql

***解説***
- rails ~~~~ newの~~~~部分が、使用するバージョンの名前で、筆者は他のツールでアプリケーションのバージョンを揃える必要があったので使用した
- new以下の部分がアプリ名となっているので、作成したいアプリの名前を入力
- -d以下はデータベースを管理するシステムの名前を入力する。今回は、MySQLを使用するので`-d mysql`と入力


## アプリ名のディレクトリにいることを確認
- ***ターミナルで`cd アプリ名`のディレクトリへ移動***
今回は、`cd first_app`として入力
また、この際に`pwd`と入力することで、現在の位置を確認できる。first_appと表示されればOK


# データベースを作成
下記のコマンドを実行
データベースがSequel Proに作成される。
 #
    rails db:create




# おわりに
以上、自分の備忘録&アウトプットも兼ねて書いて見ました。
ありがとうございました
Zoomの録画をMoodleに自動的に登録するプラグインの検討

# きっかけ
「Zoomを利用したリモート講義の動画をLMSにアップロードしているが、手動でダウンロードして登録するのが手間なので自動にできないか？」という話があったので、そもそもそのようなことが可能なのか検討してみる。

# APIとApp Marketplace
Zoomの有償サービスだとクラウドレコーディングが利用でき、エンコードが完了してダウンロードできる状態になると、ダウンロード先URLが記載されたメールが送られてくる。
ただ、メールを指定したアドレスに転送するとか、POP3かなにかでメールをチェックしてリンクからダウンロードするのは最終手段として、もっと良さそうな案を考えていると、ZoomのAPIが利用できそうだということが分かった。ただし、その場合はApp Marketplaceでアプリを公開する必要があるらしい。

幸いにApp Marketplaceでのアプリ作成は有償サービスのライセンスを持っていれば簡単にできるようで、さらにアプリは非公開での利用もできる様子。そこで考えた導入シナリオは、プラグインをLMS管理者が導入し、プラグインのドキュメントの手順に従って自組織のZoomライセンスを利用してApp Marketplaceにアプリを作成する。アプリ作成といっても実際はOAuth2.0のエンドポイントの登録やシークレットキーの作成程度。

「講義を行う教員が自分のコースにブロックを設置し、自分のZoomアカウントと紐づけておくと、事前に設定した条件に従ってダウンロードされた動画が、コース中に自動的に貼り付けられる。」という挙動で行けそうだ。

# 実証コードの作成
ここで「できそうですよ」と回答してもよいのだが、実際に作成を依頼されたときに「…できませんでした」とならないように実証コードを書いてみる。

composerでGuzzleを導入して、get_token.phpにアクセス。「Zoom認証」のリンクをクリックすると、Zoomのログインと認可画面が表示される。このget_token.phpのURLがAPP_REDIRECT_URLに設定してあるため、Zoomで認証して権限を付与した後は$codeの値を利用してaccess_tokenなどを取得する。

```php:get_token.php
<?php
require_once __DIR__.'/vendor/autoload.php';

define('APP_CLIENT_ID', '');
define('APP_CLIENT_SECRET', '');
define('APP_VERIFICATION_TOKEN', '');
define('APP_REDIRECT_URL', '');

echo '<a href="https://zoom.us/oauth/authorize?response_type=code&client_id='.APP_CLIENT_ID.'&redirect_uri='.APP_REDIRECT_URL.'">Zoom認証</a>';

if (empty($_SERVER['QUERY_STRING'])) {
    die('no query');
}

list($name, $code) = explode('=', $_SERVER['QUERY_STRING']);

$Client = new \GuzzleHttp\Client;

$params = [
    'headers' => [
        'Authorization' => 'Basic ' . base64_encode(APP_CLIENT_ID.':'.APP_CLIENT_SECRET),
        'Content-Type' => 'application/x-www-form-urlencoded',
    ],
    'form_params' => [
        'code' => $code,
        'grant_type' => 'authorization_code',
        'redirect_uri' => APP_REDIRECT_URL,
    ]
];
$Response = $Client->request('POST', 'https://zoom.us/oauth/token', $params);

$json = $Response->getBody()->getContents();
$json = json_decode($json);

echo '<pre>'; var_dump($json); echo '</pre>';
```

とりあえず動作テストなので、var_dump()された結果からaccess_tokenをコピペしてget_metadata.phpに渡す。
事前に別途取得しておいた（という設定の）ミーティングIDから録画された動画をダウンロードして保存する。

```php:get_metadata.php
<?php
require_once __DIR__.'/vendor/autoload.php';

$access_token = '';
$meeting_id = '';

$Client = new \GuzzleHttp\Client;

$params = [
    'headers' => [
        'Authorization' => 'Bearer ' . $access_token,
    ]
];
$Response = $Client->request('GET', "https://api.zoom.us/v2/meetings/{$meeting_id}/recordings", $params);

$json = $Response->getBody()->getContents();
$json = json_decode($json);
$url = $json->recording_files[0]->download_url;
$Response = $Client->request('GET', $url.'?access_token='.$access_token);

file_put_contents(__DIR__.'/movie/'.$json->id.'.mp4', $Response->getBody()->getContents());
```

ひとまずZoom APIを利用して期待した処理が可能そうなので、本当に必要ならプラグインを作成すると回答。

実際に作成する場合はEvent subscriptionでエンコード完了時にWebhookで呼び出してもらえるかとか確認する必要があると思う。
ペイオフマトリクスはプログラマーの優先順位付けに最適

## はじめに
<font color="Blue">「優先順位の高いものから着手してください」</font>
<font color="Red">「もうちょっと優先順位を考えてやってよ〜」</font>
こんな指示が上司から来ること、ありませんか？

でも、<font color="Red">優先順位をどうやってつけるかは教えてくれない人</font>が多い！

そこで、この記事では、そんな駆け出しプログラマーに有効な、優先順位をつける時に役立つフレームワークである**ペイオフマトリクス**について解説します。


## 対象者
この記事は下記のような人を対象にしています。

- 駆け出しエンジニア
- プログラミング初学者
- <font color="Red">「優先順位が高いのは、全部！」</font>ってなっちゃう人

## 結論
ペイオフマトリクスで「難易度」と「効果」を評価すれば、優先順位がつけられる！

## ペイオフマトリクスはどんな時に使う？
優先順位をつけるのに有効なペイオフマトリクスですが、駆け出しプログラマはどんな時に使うのでしょうか。

:::note warn
- アイデアが出過ぎて、どれからやれば良いか迷った時
- クライアントから大量の要望をもらったけど、何からやるか悩んだ時
- 上司から与えられたタスクが多すぎて絶望を感じた時
:::

誰しも上記のような状況になったことはあるのではないでしょうか。
新人のうちは「**全部やります！すぐやります！**」とガムシャラにやるのも良いでしょう。
でも、ワンランク上のプログラマーを目指すなら、ペイオフマトリクスで優先順位をつけることで、効率的にタスクを片付けることができます。

### ペイオフマトリクスを使って優先順位をつけるメリット
ペイオフマトリクスを使うと、下記のようなメリットがあります。

:::note
- いつまでに、何ができるかクリアになる
- タスクを取り組む順番が決まる
- 不要なタスクが分かる
:::

できるプログラマーっぽいですね！良い感じ！

### ペイオフマトリクスを使って優先順位をつけないデメリット
ペイオフマトリクスを使わないと、下記のようなデメリットがあります。

:::note alert
- 「やっぱこれを先にやれば良かった...」と後悔
- クライアントから無限に要望が来てパンク
- 中途半端に着手して、全タスクが炎上
:::

うーん、仕事できないやつ感がやばいですね...

## ペイオフマトリクスは「難易度×効果」で書く！
ペイオフマトリクスは2つの軸から構成されています。

### 難易度
タスクを完了するまでにかかる時間や作業量、経験などから見積もると良いでしょう。
難易度が低い/高い例を下記に示します。

|難易度：低|難易度：高|
|:-:|:-:|
|すぐ終わる|完了に時間がかかる|
|以前にやったことがある|未経験の作業|
|1人で完結する|複数人の確認・承認が必要|
|仕様が明確|仕様がふんわり|

### 効果
さまざまな指標がありますが、下記に一例を記載します。
きちんと自分の担当タスクのインパクトを見積もりましょう！

|効果：低|効果：高|
|:-:|:-:|
|売上が低い|売上が高い|
|影響人数が少ない|影響人数が多い|
|PV数が少ない|PV数が多い|
|技術力UPが見込めない|技術力UPが見込める|
|転職に不利|転職に有利|
|上司/クライアントが喜ばない|上司/クライアントが喜ぶ|

## ペイオフマトリクスの4つの領域 
では、実際のペイオフマトリクスを見てみましょう！
![ペイオフマトリクス.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2157342/efcf2b17-a9cd-79dc-e13b-0af19c578acb.png)

### 難易度が低く、効果が高い(A)は「とにかく優先してやる！」
簡単にできて、高い効果が見込めるA領域は優先順位No.1です。
優先的に時間を充てて、タスクを完了させることに全力を注ぎましょう。
ペイオフマトリクスを使う最大の目的は、この領域にあるタスクを炙り出すことにあります。

ただし、世の中そんなにうまくいかないことが多いです。
実際に自分のタスクを仕分けてみると、A領域がなく、B,Cだらけ...ということもあるので要注意です。

### 難易度が高く、効果が高い(B)は「覚悟を決めて取り組む」
難易度は高いものの、効果が高いB領域は優先順位第2位です。
時間・労力がかかるので、まとまった時間を確保できるかどうかが、成功の鍵になります。
同じく優先順位2位のCを先にちゃちゃっと片付けてからじっくりBに取り組むのか、優先的にBに取り組むのかは、あなたの判断に委ねられます。
ペイオフマトリクスを使う際にBとC、どっちを優先するか？はセンスが問われるところです。

### 難易度が低く、効果が低い(C)は「さっさと片付けよう」
難易度が低い代わりに、効果が低いC領域は「やりたくないけど、片付けなきゃいけないタスク」が多いでしょう。
ちゃちゃっと片付けるのもありですし、ルーティンワークだとしたら、効率化できないか？他人に任せられないか？などを検討して、できるだけ自分の時間を確保するようにしましょう。

### 難易度が高く、効果が低い(D)は「やるだけ無駄。やめよう」
難易度は高いのに効果が低いD療育は無駄の塊。
中止を提案するもよし、こっそりやったふりをするのもよしです。
ペイオフマトリクスでA領域のタスクが見つからないことはありますが、D領域のタスクは大量に見つかるはずです。それらをやめるだけで、自分の時間を大幅に確保できるはずです！

## 締切があるタスクの整理には「重要度×緊急度」
　別バージョンのペイオフマトリクスもあります。
<font color="Red">「難易度とか悠長なこと言ってるけど、上司/クライアントから締切が指定されてるんだから、締切の近い順に着手するしかないでしょ！」</font>と思考停止しているあなたには「重要度×緊急度」がおすすめ。

重要度は前述した「効果」と同じ考えで良いです。
緊急度は締切が近いものを高い、締め切りが遠いorないものを低い、と考えれば良いです。
![ペイオフマトリクス2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2157342/3c4583fc-5286-1cd6-b117-ea098b2f90b2.png)

A領域を優先する、という結論は変わりません。
そしてAが終わり次第、締め切りが近いCをやろう...となってしまいがちですが、一旦、それで本当に良いか考えてみましょう。
重要度が低いCは「さっさと片付けるorやったふりor他人に任せる」ことで自分の時間を作り、重要なB領域に時間を割くのがベストです。
そしてD領域は断固やらない、という点は一緒ですね。

上司から締め切りが与えられた個人タスクなどの整理に役立つと思うので、活用してみてください！

## おわりに
プログラマーの優先順位付けに有効なペイオフマトリクスについてまとめました。
優先順位をきちんとつけて、タスクをサクサク片付けていきましょう！
GitHub ActionsでPostgreSQLの最大接続数を設定する

# 経緯

今まで通ってたGHAのテストが突然落ちるようになりました。
ローカルでは問題なく通るのに、GHAのワークフローだと落ちる。
Actionsタブからログを確認すると、どうやら最大接続数が足りなくなり、論理データベースを立ち上げるインテグレーションテストが失敗しているようでした。

この記事では、GHAのワークフローでPostgreSQLの最大接続数(`max_connection`)を設定する方法を記します。

# 解決方法

## 前提

もともとのPostgresの設定は以下です。

```yaml
# ...
jobs:
  test:
    name: Test
    runs-on: ubuntu-latest
    services:
      postgres:
        image:
          postgres: 12
        env:
          POSTGRES_USER: postgres
          POSTGRES_PASSWORD: password
          POSTGRES_DB: postgres
        ports:
          - 5432:5432
    steps:
# ...
```

## `steps` を追記

DockerコンテナにSSH接続して、PostgresSQLの設定ファイルを編集します。

```yaml
# ...
jobs:
  test:
    name: Test
    runs-on: ubuntu-latest
    services:
      postgres:
        image: postgres: 12
        env:
          POSTGRES_USER: postgres
          POSTGRES_PASSWORD: password
          POSTGRES_DB: postgres
        # [追加]
        options: >-
          --name my_postgres
        ports:
          - 5432:5432
    # [追加]
    steps:
      - name: Increase max connections
      - run: |
         docker exec -i my_postgres_container bash << EOF
           sed -i -e 's/max_connections = 100/max_connections = 1000/' /var/lib/postgresql/data/postgresql.conf
         EOF
# ...
```

最大接続数はデフォルトでは100に設定されていますが設定ファイルを直接書き換えて1000に増やしています。

更に変更を反映させるために、コンテナを再起動させます。

```yaml
    steps:
      - name: Increase max connections
      - run: |
         docker exec -i my_postgres_container bash << EOF
           sed -i -e 's/max_connections = 100/max_connections = 1000/' /var/lib/postgresql/data/postgresql.conf
         EOF
        # [追加]
         docker restart --time 0 my_postgres
         sleep 5
```

`docker restart`でコンテナを一度をkillする際、デフォルトでは10秒待つ設定になっているので `--time 0` を指定しています。
`sleep 5` はコンテナが起動するのを待つためです。

# おわりに
これで最大接続数を増加させる設定は完了です。
しかし、これが最適なやり方なのかはわかりません。もっとスマートなやり方があったら教えてほしいです🙁
【Golang】Gitコミットのrevision番号(commit id)を取得するには 

# Go 1.18以降でBuildInfoを使う場合
[BuildInfo](https://github.com/golang/go/blob/9cec77ac11b012283e654b423cf85cf9976bedd9/src/runtime/debug/mod.go#L40-L47)のSettingsにある"vcs.revision"を取得。

```go:main.go
package main

import (
	"fmt"
	"runtime/debug"
)

func main() {
	var rev string
	info, _ := debug.ReadBuildInfo()
	for _, s := range info.Settings {
		if s.Key == "vcs.revision" {
			rev = s.Value
		}
	 }
	fmt.Printf("revision: %s\n", rev)
}
```

```sh
$ go mod init sample 
$ git init && git add . && git commit -m 'initial commit'
$ go build . && ./sample
revision: bd486152ad205a33a1ec87c1122e3e20bda577aa
```

# Go 1.１８より前でBuildInfoを使わない場合
Gitコマンドを叩き、[CombinedOutput](https://pkg.go.dev/os/exec#Cmd.CombinedOutput)で標準出力を取得。`.git`ディレクトリがあれば取得できます。

```go:main.go
package main

import (
	"fmt"
	"os/exec"
)

func main() {
	cmd := exec.Command("git", "show", "--no-patch", "--format=%H")
	out, _ := cmd.CombinedOutput()
	fmt.Printf("revision: %s\n", out)
}
```

```sh
$ go mod init sample 
$ git init && git add . && git commit -m 'initial commit'
$ go build . && ./sample
revision: 680ec96a84debf616fd3f339e9b55b0897ac1b9c
```

### 参考記事
- https://blog.y-yuki.net/entry/2017/04/28/000000
【初心者】プログラムを作る材料5つ　その３「コンパイラ」

# はじめに
IT歴2ヶ月の初心者プログラマー鹿太郎です。
初心者なりに感じた疑問や分からないことを発信していきたいと思います！

続いては、プログラムを作る材料その３！「コンパイラ」について紹介します！

# コンパイラとは
コンパイラとは人間が理解できる言葉で書いたプログラム（ソースコード）を、コンピュータが理解できる「機械語」に変換するプログラムのことです。

「機械語」とは0と1の２種類で表現されるデータのことで、コンピュータはこの機械語で構成されたものしか読み取れません。

しかし、人間が機械語でコードを書くのは非常に効率が悪く、また難解です。

よって、コンパイラが必要なのです。

# コンパイラがプログラムを機械語に変換する仕組み
コンパイラは以下の５つのステップを踏んで、プログラムを機械語に変換しています。

## ① 字句解析
「字句解析」とは、ある言語で書かれたプログラムについて、構成要素を解析し、言語的に意味のある最小の単位に分解する処理のことです。

予約語や識別子、演算子などの単位で分け、プログラムのどこにどのような要素があるのか把握するのが目的となります。

## ② 構文解析
「構文解析」とは、いくつかの要素がまとまりになっている「構文」を探し、その構成要素がどのような関係にあるか解析することです。

例えば、字句解析にて「1」「+」「2」「=」と解析されたとき、それぞれの関係を解析し、「1+2=」と認識させるのが、構文解析の役割となります。

## ③ 意味解析
「意味解析」とは、ソースコード内に記述された変数の型や文が仕様に沿っているかチェックする処理のことです。

## ④ 最適化
「最適化」とは、ソースコードの無駄な部分を効率化する処理のことです。
メリットとして、プログラムの高速化や使用するメモリの節約などが挙げられます。

## ⑤ 機械語プログラム生成
最後に、最適化されたコードから、コンピュータが理解できる機械語で構成されたプログラムを生成します。


##
以上の５ステップを行うことで人間が書いたプログラムを機械語のプログラムに変換することができます。

結論！コンパイラは、人間が書いた文字をコンピュータが読めるようにしてあげる仕組みのことです！

次回は、プログラムを作る材料5つ　その４「エディタ」について紹介します！
ではまた。
Slack認定管理者試験の振り返り

先日、Slack認定管理者試験に合格しました。
これもひとえに、皆様からの応援のおかげです！ありがとうございました！
（と、勝手に感謝）

[Slack認定管理者](https://www.slackcertified.com/page/slack-certified-admin-ja)

今回は、その内容について振り返ってみたいと思います。
これから、Slack認定管理者試験を目指される皆様の参考になれば幸いです。

## ■試験前のレベル

試験前の私の知識レベルは、小規模なチームのワークスペース管理者
といったところです。

- ワークスペース管理者権限を持っている
- Google Drive、Salesforce、ワークフロー等の連携アプリをインストール
- チームメンバーのコミュニケーションは基本はSlack
- 一部の顧客と、Slack Connectでコミュニケーション（先方がホスト）

定番の機能は使ったことがあるものの、セキュリティ設定やID管理について、本格的な実務経験はありません。

## ■試験時間と問題形式

試験はオンライン形式で、９０分間で、６０問を解いて６５％（３９問正解）すれば合格です。（※オンライン形式の罠は後述）

申込みは、こちらのサイトから行います。
[Slack 認定管理者コース + 試験](https://www.slackcertified.com/page/slack-certified-admin-ja)

試験は３９問正解したところで終了します。私は５１問目を回答したところで終了しました。
（まぁまぁ間違えました）

試験は全て選択式です。
選択肢を選んで、Submitボタンを押しながら進めます。

即時に採点されるため、前の問題に戻ることは出来ません。
正解の選択肢の数も明示されるため、複数選択肢の問題でも基礎を押さえていれば取れると思います。


## ■教材と勉強時間

教材は、Slackの公式サイトにある「Slack認定管理者準備コース」を使うことをオススメします。
[Slack 認定管理者コース + 試験](https://www.slackcertified.com/page/slack-certified-admin-ja)

約1万5000円と、少し高いですが、日本語で学習出来る教材は恐らくこれだけです。
勉強時間は、おおよそ４０時間ほどでした。

## ■教材と勉強方法について

「Slack認定管理者準備コース」では、様々な形式の問題が出てきますが（キャラクターが出てきて、会話形式で回答するなど）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2642894/1f112cde-749a-4a9c-76b5-b4a89ec45ac3.png)

そうした形式の問題は試験には出てきません。

あれは、勉強を飽きさせない工夫だったのでしょうか…

問題の内容は、実際の試験でも類似問題が出ましたので、準備コースの問題は全て正解出来るくらいに勉強しておくことがオススメです。
試験内容を今後に活かす意味でも、「もし自分が、誰かに質問を受けたらどう答えるか？」を意識しながら解くと理解が進むと思います。

特に、プラン毎の違い、プロジェクト規模による違い等が問われるため、準備コースの内容を表にして整理するのも効果的でした。


## ■勉強範囲

Slack認定管理者準備コースの章立ては、以下のようになっています。

- 基礎
- ワークスペースの管理
- チャンネルとユーザーグループの管理
- ユーザーライフサイクル管理
- アプリの管理
- セキュリティ
- 成功に向けた問題解決

それぞれで、よく問われていたと感じたのは以下の内容です。

（出題される全てではありません。詳しくは公式サイトや教材等を御覧ください）

### ①基礎

- ビジネスニーズに合ったSlackプランの選択と、各プランの違い・主要機能
- Enterprise Grid と他のプランの違い

### ②ワークスペースの管理

- 主にEnterprise Gridの場合のワークスペース運用シナリオ
- ドメインによる制御、ワークスペースの統合、表示制御、作成申請の運用フロー
- マルチワークスペースチャンネル

### ③チャンネルとユーザーグループ

- チャンネル・DM・グループDMの違い
- Slackコネクトを使ったシナリオ
- 削除、アーカイブ、チャンネル名のガイドライン等、運用ルール

### ④ユーザーライフサイクル管理

- 認証方式、事前セットアップと適切なプラン
- アカウント解除に関連するシナリオ
- ゲスト

### ⑤アプリの管理

- アプリを使った効率化と、承認フロー
- 仕事効率化のニーズに合った技術選択（ワークフロー、アプリ、ボット、カスタムアプリ）

### ⑥セキュリティ

- 暗号化、アクセスコントロール、モニタリング、ロギング、モバイルデバイスの制御など
- インポート・エクスポート／データの保存と破棄、法令遵守にたいする対応

### ⑦成功に向けた問題解決

- Slack導入を成功させるための考え方（ビジョン、目的）の設計と周知
- 統計情報を使った利用状況の分析と改善策

## ■注意事項（特に英語）

最後に、試験の注意事項です。

試験問題は日本語で出題されます。
しかし、試験開始前の監督官との会話は英語で行う必要があります。
実は、これが一番キツかったかもしれません。

内容は、「身分証をカメラに向かって見せてください」
「タスクマネージャーで他のアプリが動いてないか見せてください」
「試験申込みの際に登録した質問の３番めの答えを教えてください」
「説明を読んだら、チェックを付けてボタンを押して進んでください」
といった定型的なものですが、ネイティブスピードで言われるため聞き取りからして大変でした。

試験後に、英会話を勉強しようと感じること請け合いです。


ただ、内容はオンライン試験申し込みの際に書かれていた注意事項（英語）に添ったものになりますので、事前に読んでおくことをオススメします。
（内容を推測出来ます）


## ■まとめ

以上が、Slack認定管理者試験の振り返りになります。
Enterprise Grid等、普段なかなか使うことのないプランについての知識も多く求められますが、社内情報を扱うWebサービスを利用するにあたって、一般的に意識するべきポイントも整理されているため、Slack以外にも参考になると思います。

この記事が、勉強されている皆様の参考になることを祈りつつ…
ソート機能実装で役に立つサイト

★ソート機能について記載されたQiita

https://qiita.com/kcl215/items/c0222befe4a6b270986a

https://qiita.com/aaaasahi_17/items/f99174efa1c26131797e

★Bookersにソート機能実装的な感じだったやつ！

https://techtechmedia.com/ransack-app-rails/

★ソート機能周辺で役に立ちそうな感じ♪

https://techblog.hubbit.io/2021/04/18/5ruby-on-rails-taskapp-4/
FactoryBotメモ

# FactoryBotとは
テスト用のダミーデータを簡単に作成できるGem。

# 導入
```
group :development, :test do
 # 省略
 gem 'factory_bot_rails'
end
```
```
% bundle install
```

# FactoryBotの設定
```ruby
RSpec.configure do |config|
 # 省略
 config.include FactoryBot::Syntax::Methods
end
```
system/spec_helper.rbに上記を記載することで、Factroy作成時にFactoryBotの記載を省略できる。

# factoriesの作成
```
% rails g factory_bot:model user
```
factroriesディレクトリ直下にusers.rbが作成される。

# サンプルデータの記載
## 雛形
```ruby
FactoryBot.define do
 factory :user do
  
 end
end
```
## 基本的な書き方
```ruby
FactoryBot.define do
 factory :user do
  name { 'yamada' }
  password { 'password' }
  password_confirmation { 'password' }
 end
end
```
`name` `password` `password_confirmation` はUserモデルのカラム。
## 一意のサンプルデータの作成
```ruby
FactoryBot.define do
 factory :user do
  sequence(:email) { |n| "test#{n}@example.com" }
  sequence(:name) { |n| "test#{n}" }
 end
end
```
## traitの利用
例えば、管理ユーザーや一般ユーザーなど複数のサンプルデータを作成したい時、traitを使うと一つのファイルに記載ができる。
```ruby
FactoryBot.define do
 factory :user do
  trait :admin do
   name { 'admin_user' }
   role { :admin }
  end
  trait :general do
   name { 'general_user' }
   role { :general }
  end
 end
end
```

# テストデータの作成
```ruby
let(:user) { create :user }
# traitの利用
let(:admin) { create :user, :admin }
```
IPヘッダに関するメモワール

初投稿。
まだまだ初学者ですがネットワークの勉強をしていくうちに、パケットのフォーマット構造を理解することがまず肝心ではないかと思い始めました。
設定コマンドを理解することも大事ですが、コマンドとは、任意の情報をフォーマットを追加/編集する、フォーマットにある任意の情報の処理方法を決定する。という２つに大分されるのではないかと思ったのです。
そこでパケットトレーサを使って検証してみました。

IPヘッダについて考えてみます。
構成は以下の通り。ルーティングはスタティックで設定しています。
左側に一覧にしたのはインターフェイスのMACアドレスです。
![構成図と情報.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710882/8b8aaf75-62c9-5079-2f66-7129cd3c6601.png)

PC1(192.168.1.1)からPC2(192.168.1.3)へPingを打ってみました。
ここでR2のパケットをキャプチャすると以下のようになります。
![R1→R2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710882/c39d75cd-1f8c-7a77-596f-86e23f68a36a.png)

送信元IPと宛先IPは192.168.1.1→192.168.1.3で変化はありません。
MACアドレスを参照するとInはR1のGi0/1からR2のGi0/1に向けたもの。OutはR2のGi0/0からPC2のFa0/0へ向けたものであることがわかります。


今回の検証を踏まえると、書き換えられるのはL2レベルのMACアドレスだけでした。
IPヘッダというよりはイーサネットヘッダについての検証になりました、、笑

次回はVLAN間ルーティングにおけるパケットのフォーマットについて検証する予定です。

※本記事は個人的備忘録になりますが、間違っている点やアドバイスなどあれば積極的にコメントを
 頂けますと幸いです。