OmniAICreator/Qiita-1.07M huggingface dataset:
Series.dt.strftime( )とは？

![c6h7rok9c2v31.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1076905/e2fff834-99f8-75de-80a6-9b26f9126db6.jpeg)
#Series.dt.strftime( )とは？

たまに見かけるシリーズ型の列に対して書いていた.dt.strftime
ご存知の通り日付型の文字列を好きな形で表示できる関数である。
strftimeをさまざまなところで見かけるが、初学者にとってとっつきにくく少しわかりにくい.
そこで今回、調査結果をツラツラと記載していきたいと思う。

```公式ドキュメントから該当ページ抜粋
Convert to Index using specified date_format.

Return an Index of formatted strings specified by date_format, which supports the same string format as the python standard library. Details of the string format can be found in python string format doc.

Parameters
date_formatstr
Date format string (e.g. “%Y-%m-%d”).

Returns
ndarray
NumPy ndarray of formatted strings.
```
[公式ドキュメントリンク](https://pandas.pydata.org/docs/reference/api/pandas.Series.dt.strftime.html?highlight=strftime#pandas.Series.dt.strftime)

**Pandas公式ドキュメントで記載されているということはpandasが用意したstrftime関数となる。**
![スクリーンショット 2021-12-16 21.28.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1076905/2b7bb4e5-8aeb-3165-2b09-2da666a76735.png)
また上のように文字列に変換される。

#datetimeモジュールにも存在するstrftime
[公式ドキュメントリンク](https://docs.python.org/ja/3/library/datetime.html)

```
import datetime
datetime.strftime("%Y%m%d")
```
Pandasと同様に文字列で返ってきます。

#そもそもstrfってなに？
strftimeって言われましても、strfってなんやねん！って思ってらっしゃる方は多数いらっしゃると思います。
明確にこれが正解と言えるような方は少ないようですが、
str→(strings)　文字列型
f→(formatted) フォーマット化された
time　→ 時間

**文字列型＋指定したフォーマットで表示させる＋時間**

なんかすごくしっくりきますね。
【ゆく年くる年】2021年末からiOSアプリをリリースするためApple Developer Programにジョインしましょう

# どういうことか

iOSのアプリをリリースするためにはApple Developer Programに登録する必要がある。
で、このプログラムを始めるためには年額12,980円（1,180円の税込み）というまあまあな課金をする必要がある。

## よくわからなかったこと（読み飛ばしてもいい）

下記のページを見たら「アプリを使って登録しましょう」といったことが書いてあるが、いざアプリをDLして開いてみたら「**このApple IDでは、Apple Developer Appからの登録をご利用できません**」などと書いてある。なんなのだ？？
結論から言うと下記のページは参考にしなくてもいい（もしかするとこれが当てはまるユーザもいるのかもしれない。Apple IDの登録時期とかで）。

https://developer.apple.com/jp/support/enrollment/

https://developer.apple.com/jp/support/app-account/

## 実際に登録する

まず個人情報の登録。

https://developer.apple.com/jp/programs/

ここの右上の『登録』を押して『登録を開始する』を押す。
フォームが出てくるので記入する。前半は日本語でOK。特筆することはないが『**国番号**』は『**81**』を入れる。
後半は英語で名前や住所を書き、流れで課金の処理も行って終わり。

**一応**、自動更新を回避して解約するかもしれないことを考えて、来年のカレンダーの登録日前日に「デベロッパー登録日前日」など書いておこう（ライフハック）。

## 登録したが

Apple Developerの個人ページにアクセスしてもまだDeveloperとしての機能を使うことができない。

![b60f6641cf6466860d937bcd5a2b6f62.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/413699/58866eec-ec98-21c8-81e3-6269bc9ba6ff.png)

"To continue your enrollment, complete your purchase now.（**登録を続行するには、今すぐ購入を完了してください**）"と書いてあるが、もうすでに終わっているはずだ。
で、その下に"Your purchase may take up to 48 hours to process.（**ご購入の処理には最大48時間かかる場合があります。**）"と書いてあり、すぐにはDeveloperとして動くことはできない。辛抱しながら登録完了メールを見逃さないようにしよう（土日は来ないっぽい）。

## 登録完了

晴れてメールがきたら登録完了。
これでアプリをリリースできる。
よいクリスマスを。来年のサンタはあなた次第。
Webで大事な単語を一言でまとめる

### IPアドレス
コンピューター間でデータのやりとりをする際にデータの行き先を特定するための識別番号。一意性を持つ。

### ポート番号
あるコンピューターが提供するサービスを特定するための番号。IPアドレスとポート番号を一緒に指定することによって、特定のコンピュータの特定のサービスを受け取れる。

### URL
Uniform Resource Locatorの略。以下の4つの要素から構成される。
1. スキーム名 : プロトコル名が付く。HTTPなど。
2. ドメイン名 : IPアドレスで記述することも可能。
3. ポート番号 : 省略可能。通常は80番を使用する。
4. パス名 : サーバー上のディレクトリやファイルを指定できる。

### DNS
Domain Name Systemの略。
ドメインをIPアドレスに変換するためのもの。

### HTTP
Hyper Text Transfer Protocolの略。

Webブラウザからリンクをクリック
↓
WebブラウザがWebサーバーに対してデータを要求
↓
Webサーバーが要求内容を解析
↓
要求されたデータをWebブラウザに返す
↓
Webブラウザは受け取ったデータをWebページに変換して画面上に表示


# 参考
分かりやすくまとめてくれているのでとてもおすすめです
[イラスト図解式 この一冊で全部わかるWeb技術の基本](https://www.amazon.co.jp/%E3%82%A4%E3%83%A9%E3%82%B9%E3%83%88%E5%9B%B3%E8%A7%A3%E5%BC%8F-%E3%81%93%E3%81%AE%E4%B8%80%E5%86%8A%E3%81%A7%E5%85%A8%E9%83%A8%E3%82%8F%E3%81%8B%E3%82%8BWeb%E6%8A%80%E8%A1%93%E3%81%AE%E5%9F%BA%E6%9C%AC-%E5%B0%8F%E6%9E%97-%E6%81%AD%E5%B9%B3/dp/4797388811)
Blenderでメッシュをきれいにするには

## メッシュをきれいにするには

Blenderで、ちょこちょこ点を動かしてると、汚くなってくることはないでしょうか？
ここでは、簡単にきれいにする方法を紹介します。

説明用に、下記のメッシュを用意しました。なるべくローポリでへこみがないものが良いです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13955/d8b62940-66f6-aa0f-37ac-30374ffa0dd3.png)

元は`Sphere`です。縦横に真っすぐだったのですが、ジグザグになったりしてます。

## メッシュをきれいにした後の比較

右が元のオブジェクトで、左が修正後です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13955/2c62b144-0fcb-f693-c603-901f0adff604.png)

## 手順

- [PolyQuilt](https://sakana3.github.io/PolyQuilt/)アドオンを使います。リンク先からダウンロードしてインストールしてください。PolyQuiltアドオンはなくてもできるのですが、あると見やすくなります。
- きれいにしたいオブジェクトを複製します。
- 複製したオブジェクトに以下の処理をします。
    - マテリアルをつけて色を緑などにします。これは、元のと複製したものとを区別するためです。
    - サブディビジョンサーフェスモディファイアーを追加します。これは、メッシュが荒いときれいになりにくいことがあるからです。あまりに形が変わるようであれば、しなくても大丈夫です。
    - `1.01`倍のように、ちょっと大きくします。これは、サブディビジョンサーフェスで、若干小さくなるためです。サイズに違和感があれば、最後に調整しても良いでしょう。

ここまでで以下のようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13955/54ca2650-7732-da37-d418-a84a3e890a35.png)

## 手順続き

- 修正したいオブジェクトを選択して、編集モードに入ります。
- 「スナップ」をオンにして、スナップ先を面にします。

![スクリーンショット 2021-12-17 21.31.17.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13955/3c8d3d0e-3ac7-55c5-a281-1d23ebd96eba.jpeg)

- PolyQuiltを選び、Shiftを押しながら頂点をドラッグしてスムーズを掛けていきます。へこんでいるところはうまくいかないので避けましょう。

※ PolyQuiltを使わない場合は、スカルプトモードでスムーズを掛けてください。

これだけでメッシュがきれいになっていきます。作業が終わったら複製したものは削除してください。

## 別の方法

スカルプトモードで、スライドリラックスにして、Shiftキーを押しながらドラッグしてもメッシュがきれいになるようです。こちらの方がお手軽ですね。

以上
c#のジェネリックを使ったコードで、プログラムがクラッシュする現象

#概要
薄い内容の記事です

c#のジェネリックを使ったコードを練習で書いてみたところ、
実行時にプログラムがクラッシュしてしまう事がありました。

#問題のコード例
```c#

struct Test<T> { }
struct HasTest
{
	//プログラムがクラッシュするのは、おそらく↓が原因
	Test<HasTest> test;
}

static class Program
{
	static void Main()
	{
		try
		{
			/*
			↓を実行するとプログラムがクラッシュする。
			System.TypeLoadExceptionが投げられるが、キャッチできない
			エラーメッセージは、「Could not load type 'HasTest' from assembly」
			*/
			new HasTest().ToString();
		}
		catch
		{
			System.Console.WriteLine("エラー発生");
		}
	}
}

```
Power BI: エラー: 『指定された値は無効な CRLF 文字を含んでいます』の対処

# 背景

久しぶりに確認したレポートでを吐いていたエラーが以下

![2021-12-17_12h13_51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1645569/239b468a-ecaf-1ad6-e30e-53c78044f85c.png)

自宅では再現しないものの、エラーと対処法の記録を残しておく

# 原因箇所

Power Query を VS で Debug 出来るようにしないとね

```c#:Error
Excel.Workbook(Web.Contents("https://****/SampleFile.xlsx"))
```

https://docs.microsoft.com/en-us/powerquery-m/web-contents

https://docs.microsoft.com/en-us/powerquery-m/excel-workbook

# 対処法
SharePoint.Contents() を利用するだけ

https://docs.microsoft.com/en-us/powerquery-m/sharepoint-contents

https://qiita.com/baku2san/items/2ce3ae38fce48346fb30

ただ、アクセス権の問題がある場合には、以下で代用も

https://docs.microsoft.com/en-us/powerquery-m/sharepoint-files
【Ruby のまずいコード】数値が全て一定範囲に収まっているか

# お題

引数として浮動小数点数（Float オブジェクト）の配列を受け取り，それらの数値がすべて 0 以上 1 以下であるかどうかを返すメソッドを書いてください。

# コード

## コード 1

```rb
def all_ge0_lt1?(numbers)
  numbers.each do |number|
    unless (0..1).cover?(number)
      return false
    end
  end
  true
end
```

メソッド名は「greater than 0, less than 1」から名付けました。もっと良い名前があるかもしれませんが，本記事では命名については不問とします。


## コード 2

```rb
def all_ge0_lt1?(numbers)
  numbers.all?{ |number| (0..1).cover?(number) }
end
```

# 講評

## コード 1

素朴な（ある意味で素直な）コードですね。
一つでも範囲外の要素が見つかったらそれ以降の要素については調べる必要がないので，その場ですぐ `false` を返しています。
ループの中で `return` してメソッドを抜けていますが，Ruby ではこのような書き方をしても問題ありません。
その点を除けば，大昔のプログラミング言語ではほぼこんなふうにループを回すコードを書いていたと思います。

しかし，Ruby をはじめイマドキのプログラミング言語[^imdk]ならたいがい「全ての要素が〇〇を満たす」ことを判定する手段を持っています。Ruby でいえば，コード 2 で使っている [Array#all?](https://docs.ruby-lang.org/ja/3.0.0/method/Array/i/all=3f.html) ですね[^ea]。

[^imdk]: Ruby は誕生から既に四半世紀が過ぎており，むしろ歴史ある言語ですが。

[^ea]: `Array#all?` のほかに，同じ働きの [Enumerable#all?](https://docs.ruby-lang.org/ja/3.0.0/method/Enumerable/i/all=3f.html) もあり，`each` を持つさまざまなオブジェクトに使えます。

## コード 2

コード 2 では `Array#all?` を用い，大幅に簡素化しています。

これ以上簡潔に書く余地はあるのでしょうか？　あります。

# 改善

[Array#all?](https://docs.ruby-lang.org/ja/3.0.0/method/Array/i/all=3f.html) には，ブロックを与える用法のほかに，引数を与える用法もあります。
これを使うとこんなふうに書けます：

```rb
def all_ge0_lt1?(numbers)
  numbers.all?(0..1)
end
```

いったいどういうことでしょうか？
`all?` に引数を与えたときは，その引数を左辺とし，要素を右辺とし，演算子を `===` とした演算子式を評価した結果を用います。つまり，

```rb
numbers.all?(0..1)
```

は，イメージとしては

```rb
numbers.all?{ |element| (0..1) === element }
```

のように評価されるわけです。
ブロック内の式 `(0..1) === element` を理解するためには，[Range#===](https://docs.ruby-lang.org/ja/3.0.0/method/Range/i/=3d=3d=3d.html) を知る必要があります。
`===` という演算子メソッドはさまざまなクラスに定義されており，その動作はクラスによってさまざまですが，それらをひっくるめて大雑把に表現すると，「右辺が左辺に当てはまる」ことを判定する演算子と言えるでしょう[^athm]。

[^athm]: 何をもって当てはまったことになるのかが，左辺のクラスによってさまざまなわけです。

範囲オブジェクトの場合，その範囲に入っているかどうかを判定することになります。つまり，`cover?` と同じです[^cvr]。

[^cvr]: ただし，`Range#cover?` は，引数が範囲オブジェクトの場合，「範囲に範囲が含まれるか」を判定するので，`Range#===` とは動作が異なります。また，Ruby 2.7 未満の `Range#===` は端点のクラスによっては少し動作が違っていました。

この原理と，各クラスの `===` の仕様が分かっていれば，たとえば，文字列の配列の全要素が数字を含むかどうかを

```rb
strings.all?(/\d/)
```

で判定できますし，何らかのオブジェクトの配列の全要素が数値（Numeric のサブクラスのインスタンス）であるかどうかを

```rb
objects.all?(Numeric)
```

で判定できます。

「全要素が〇〇を満たす」ではなく「少なくとも一つの要素が〇〇を満たす」であれば `any?` を使いますし，「全要素が〇〇を満たさない」なら `none?` を，「ただ一つだけの要素が〇〇を満たす」なら `one?` を使います。
演算子 `===` は，case 式だけでなく，これらの一連のメソッド，さらには `grep` の類でも暗黙に使われます。Ruby らしいプログラミングを陰で支えるメソッドと言えるでしょう。
refinarycms-blogの使い方

# 概要
refinarycms-blogの使い方について説明します
この内容について書かれている記事が少なかったので助けになれば幸いです
# 前提
既にrefinarycmsを導入したサイトにblog機能を追加する形で実装していきます
その実装方法については[こちらの記事](https://qiita.com/nanaho_mu/items/11c3c76b50217d4ad1be)で紹介しています
# 実装

## install
作成したrefinerycmsを導入したサイトのgemfileを開いて、一番下の行に下のコードを追加します。

``` :Gemfile
gem 'refinerycms-blog', git: 'https://github.com/refinery/refinerycms-blog', branch: 'master'
```

その後ターミナルで`bundle install`をしてください

※うまくいかない場合は`bundle update`をするとうまくいくことがあります

次にターミナルで以下のコマンドを実行して、blogのbackend javascript fileをオーバーライドします

``` :terminal
rake refinery:override javascript=blog/backend
```
作成した、backend.jsファイルを編集します
ファイルを開いて、最初の行を以下のように変更します

```app/assets/javascripts/refinery/blog/backend.js
//= require jquery-ui/widgets/autocomplete ←消去
//= require jquery-ui/autocomplete　　←追加
```
※これをしないと`query-ui/widgets/autocomplete not found`というエラーが出ます

次に以下のコマンドを実行してブログプラグインをインストールします

``` :terminal
rails generate refinery:blog
```


最後に以下のコマンドを実行すれば完了です

``` :terminal
rake db:migrate
```

``` :terminal
rake db:seed
```





## 参考
https://github.com/refinery/refinerycms-blog
https://github.com/refinery/refinerycms-blog/issues/510
エンジニア人生で役立った資格と思っていること

本記事は [IT資格取得をテーマに学びをシェアしよう！【PR】Udemy Advent Calendar 2021](https://qiita.com/advent-calendar/2021/udemy) カレンダー3 の17日目です。

# 自己紹介
[わたし](https://inside.dmm.com/entry/2020/08/06/yondemasu07)は、[合同会社DMM.com](https://dmm-corp.com/company/)で電子書籍事業と同人事業のエンジニアリングマネジメントに携わっています。

# はじめに
IT関連に限らず資格試験は比較的好きで、学生時代には取得にハマっていた時期があるのですが、数多く色んな資格がある中でも「どれが本当に役に立つのか」を当事者や採用に携わっている観点で発信できる人が少ないように見受けられたので、本記事を書こうと思い立ちました。

#自身が取得したIT系資格一覧
| 資格名称 | 級 | 補足 |
|:-:|:-:|:-:|
| [C言語プログラミング能力認定試験](https://www.sikaku.gr.jp/js/cpjv/cp/introduction/) | 1級 |
| VisualBasicプログラミング能力検定試験 | 1級 | ※2013年4月に廃止 |
| [J検](https://jken.sgec.or.jp/guide/index.html) | 1級 | ※現在の情報活用試験に相当 |
| [P検](https://www.pken.com/sp/examination/detail.html) | 1級 |
| [Photoshop®クリエイター能力認定試験](https://www.sikaku.gr.jp/ns/ps/introduction/) | 1級 | ※現在のエキスパートに相当 |
| [Excel®表計算処理技能認定試験](https://www.sikaku.gr.jp/ns/el/introduction/range/) | 1級 |
| [Word文章処理技能認定試験](https://www.sikaku.gr.jp/ns/wd/introduction/range/) | 1級 |
| MOUS Excel2000 | 上級 | ※現在の[MOS(マイクロソフト オフィス スペシャリスト)](https://mos.odyssey-com.co.jp/about/)。現在一番古いバージョンの扱いは2013から。[バージョン2000は2006年に廃止](https://ja.wikipedia.org/wiki/Microsoft_Office_Specialist#Office_2000) |
| MOUS Word2000 | 上級 | 同上 |
| 初級システムアドミニストレータ試験 | - | ※現在の[ITパスポート試験](https://www.jitec.ipa.go.jp/1_11seido/ip.html) |
| [基本情報技術者試験](https://www.jitec.ipa.go.jp/1_11seido/fe.html) | - |
| [キータッチ2000](https://www.kentei.ne.jp/keytouch) | ゴールドホルダー |

専門学校時代に、1つの資格取得で3単位もらえたので、下位の級を含めて1日で複数受験し、一番多い時で1ヶ月に11試験、1年間で資格試験だけで+66単位とって、1年で3年間分の単位を取ったはずが、資格での取得単位は1年分しか有効じゃないルールだったというのは実話の笑い話なのですが、1つずつステップアップしていったおかげで身についた量も多かったです。

現在振り返ると、廃止されたり・中身が結構変わっていたり・ソフトのバージョンが古くなっていたりと、長期に渡って有効な資格というのは凄く少ないなと感じます。

最近の業務では、専らGoogleスプレッドシートやドキュメントですが、ExcelやWordと機能は類似しているため、根本となる基礎の理解には役立っていると思います。

#実務で本当に役に立った資格
[基本情報技術者試験](https://www.jitec.ipa.go.jp/1_11seido/fe.html)

#資格じゃないけど実務に役だった知識や概念
・ネットワーク系全般
・データベース系全般
・セキュリティ系全般
・OSの知識
・簿記・会計
・プロジェクトマネジメント系全般

実際に受講したudemyのコースでは「[【情報セキュリティ】Ethical Hacking：ホワイトハッカー入門](https://www.udemy.com/course/ethical-hacking-jpn1/)」が役に立ちました。

#資格の良いところ
・階級などで難易度をつけられていて、特に身につけておくべき基本的な箇所が分かる
・シラバスから全体像を満遍なく学べる（これにより知識を深めたい部分のとっかかりが出来る）


#資格に求め過ぎてはダメなところ
・免許とは違ってあくまで最低限の知識があることの証明でしかない
・実技試験があるものにおいても、スキルが身に付いていることの証明には弱い
・シラバスにおいても、学び易さ理解のし易さでは無くただの分類になっていることが多い


#社会人になってから資格を取る意味はあるのか
意味は、かなりあります。
業務だけだと網羅的に経験することは難しく、知識のある領域がより任されやすくなることもあり、偏りが大きくなるためです。
ただし、業務で求められることに追いつけていない場合は、目の前の業務にしっかり取り組むことが肝心で、業務を疎かに早く帰って資格の勉強をするのは本末転倒です。

資格は「自身の実力を客観的に確認し易いツール」という位置付けで活用することが良く、同じ活用が出来る他のものがあれば、必ずしも資格にこだわる必要は無いです。


#就職や転職に資格は役立つのか
履歴書やエントリーシートに書く場合は、十分な知名度があり中級以上のレベルの資格のみを書いた方が良いです。
どのような資格においても、3級などの低い級、2週間程度勉強すればすぐ取れる資格、合格率が8割を超えるような資格（難易度が低く基準点が甘い）については、履歴書などに書くと逆にマイナスになる危険が大きいです（一番のアピールがそのレベル感だと思われてしまう）。

IPAの[ITパスポートを除く情報処理技術者試験](https://www.jitec.ipa.go.jp/1_11seido/seido_gaiyo.html)であれば、書類選考の通過は有利に働きます。


# おわりに
資格試験取得に対するモチベーションアップやヒントになれましたら幸いです。
クアドラティックボーティング(Quadratic voting)をやってみた

## ■ はじめに

SRA Advent Calendar 2021の19日目です。
関西事業部の南部です。
可能な限り誕生日の本日(12/19)に記事を書くようにして早5年。45歳になりました。
今回は、IT/ICTの話ではないのですが、今年新たにチャレンジしたことについて書いてみようと思います。

2020/10/3にNHKにて放映されたズームバック×オチアイ特別編で、落合陽一さんと台湾のIT担当閣僚オードリー・タンさんの対談の録画を見ていて、「クアドラティックボーディング」を、一度やってみたいなと思っていました。
そんな時に、自分のプロジェクトで毎年恒例のアイデアコンテストを実施することになり、いつもは1～5ptで各自投票し、上位3位までを客先に提案するのですが、今回はそれをクアドラティックボーディングでやってみました。

## ■ Y:やったこと

### ルール(クアドラティックボーティングとは。。。)

1. 投票者が持つポイントは99pt/人
1. 票を投じるごとに「平方倍のpt数」を消費する
    つまり、以下の通りです。
    1票  1×1 = 1pt
    2票  2×2 = 4pt
    3票  3×3 = 9pt
    4票  4×4 = 16pt
    …
    9票  9×9 = 81pt

1. 1人の候補者に投票出来るのは1回

普通の投票よりめんどくさいと感じて、9票＋1票ばかりになっても困るので、以下のルールも付与しました。

1. 4案以上投票すること
1. 90ポイント以上投票すること
1. 1ポイントは2つまで

## ■ W：わかったこと

[投票結果]

![image_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154223/61fc11cc-496c-2989-1b0f-bedc4fa46c49.png)

__[わかったこと]__

- 意外と4票以上に投票している人が多かった
- 投票している人数に関係なく選出されている
- 案の数がある程度多い時に有効な手段
- 1つに決めるというよりも、優先順位をつける、順番を決めるのにいいと思う

__[いまいちなこと]__

- 投票方法の説明が必要なこと
- 僅差で敗れる案、同票数が多くなってしまったこと

## ■ T：次にすること

- 追加したルールは不要で、99ポイントまで投票するというルールにしてみる。

## ■ まとめ

1人1票や1~5票で投票するよりも投票者に自由度があり投票者自身の意思を反映しやすいと感じた。一方で、投票者数が多い案でも上位3位に入らないなどあるため、1位を決める、選抜するのではなく、優先順や、順番を決まるのに向いていると感じた。
基本情報技術者試験,応用情報技術者試験を同時受験してみて

---
本エントリーはAdvent Calendar 2021「[初めてのアドベントカレンダー Advent Calendar 2021](https://qiita.com/advent-calendar/2021/first-try)」の18日目のエントリーです！

# はじめに

こんにちは。[@noll6451](https://twitter.com/noll6451)です

今回は「Teamうどん」さん主催のアドベントカレンダー「[初めてのアドベントカレンダー Advent Calendar 2021](https://qiita.com/advent-calendar/2021/first-try)」の18日目にエントリーしました
##きっかけ

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">あとは応用受かっといてくれ！<br>そしたらなんか記事書くわ笑</p>&mdash; 鈴木@勉強 (@noll6451) <a href="https://twitter.com/noll6451/status/1454032718937792512?ref_src=twsrc%5Etfw">October 29, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

twitterにこの投稿したのとSlackに魅力的な提案をいただいたので書きました
~~学校の宿題だから仕方なく書いたのではない~~

#この記事の対象者

- これから基本情報技術者試験,応用情報技術者試験を受験予定の方
- 国家資格に興味ある方　  

##国家資格の説明
 自分なりにまとめました

### 基本情報技術者
情報技術全般に関する基本的な知識・技能をもつ人や、プログラム設計書を作成し
プログラム開発、単体テストまでの一連のプロセスを担当する人のための国家資格です




### 応用情報技術者
高度IT人材に必要な応用的知識・技術をもち、方向性を確立した人を対象にした国家資格です

内容としては「基礎情報技術者」と同じですが。
情報技術を活用した戦略立案、経営戦略・情報戦略など
コンサルタントレベルの高い知識が必要になってきます

詳しいことは

https://www.jitec.ipa.go.jp/1_04hanni_sukiru/_index_hanni_skill.html#yoko


##勉強方法
基本情報技術者試験と応用技術者試験をそれぞれ午前と午後に分けて紹介します
(自分はこの方法で実際にやりました)
共通で**試験要綱、配点割合をしっかりと確認すること**

https://www.jitec.ipa.go.jp/1_04hanni_sukiru/_index_hanni_skill.html#yoko

####基本情報技術者試験
#####午前
[基本情報技術者試験ドットコム](https://www.fe-siken.com/fekakomon.php)
**アカウントは作ってください**(**自己分析**するため)
まずは何週もしましょう
(そしたら用語,計算問題の解き方も覚えられます。)

午前試験直前(1~2週間前)は
実際に**時間はかって**、模擬試験モードでやると効果的です。
>午前試験は午後の基本知識になるので自分が思っている以上にしっかりとやっておいたほうがいいです
**用語はググってより深い理解を得たほうが応用以上の試験に役立ちます**
午前は結構過去問の出題率あります。ただしほかの国家試験からの過去問もあったりします。(自分の体感です)
分からない場合はすぐに解説を見たほういいです

#####午後
[基本情報技術者試験ドットコム](https://www.fe-siken.com/fekakomon.php)
実は基本情報技術者試験ドットコムにも午後問題もできます
めちゃくちゃ便利！
午後は最初から時間をはかってやったほうがいいです
理由は問題を理解して解こうとすると1問にかける時間が多くなりがち
解く時間より解説を理解するに時間に使ったほうがいいです
**必須問題だけでかなりの配点があるので重点的に勉強するべきです**


####応用情報技術者試験
#####午前
[応用情報技術者試験ドットコム](https://www.ap-siken.com/apkakomon.php)
応用版もあるなんてほんと便利！
基本の午前と同じように勉強する。
**モダンな技術に触れたほうがいいです。(意外と出ます)**

#####午後
下の本を使って勉強しました
基本の午後のやり方と同じになりますが,より**ググって理解を深めるべき**です

https://www.amazon.co.jp/2021-%E5%BF%9C%E7%94%A8%E6%83%85%E5%A0%B1%E6%8A%80%E8%A1%93%E8%80%85-%E5%8D%88%E5%BE%8C%E5%95%8F%E9%A1%8C%E3%81%AE%E9%87%8D%E7%82%B9%E5%AF%BE%E7%AD%96-%E9%87%8D%E7%82%B9%E5%AF%BE%E7%AD%96%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E5%B0%8F%E5%8F%A3%E9%81%94%E5%A4%AB/dp/4865752218/ref=sr_1_2?crid=847GQ3LPF025&keywords=%E5%BF%9C%E7%94%A8%E6%83%85%E5%A0%B1%E6%8A%80%E8%A1%93%E8%80%85+%E5%8D%88%E5%BE%8C%E5%95%8F%E9%A1%8C%E3%81%AE%E9%87%8D%E7%82%B9%E5%AF%BE%E7%AD%96&qid=1639736112&sprefix=%E5%8D%88%E5%BE%8C%E9%87%8D%E7%82%B9%E5%AF%BE%E7%AD%96%2Caps%2C248&sr=8-2

>応用情報技術者試験の午後では戦略大事です。
戦略によっては基本情報技術者試験より合格しやすい
　(アルゴリズムやテクノロジー系苦手な方)
問題を解きながらしっかりと戦略を練る


###同時受験して気づいたこと

- どちらも午前の試験の知識を応用して解くのが午後の試験だ
- **基本情報技術者試験の午後は応用情報技術者試験の理解の助けになる(特にテクノロジー分野)**
- モダンな技術に触れると理解しやすくなる(仮想化技術等)
- 自己分析(苦手はどこか？等)や戦略(選択問題をどうするか？等)
VsCodeでpython環境を構築してみた（Windows)

まずは、VSCodeをインストール
次に、VSCodeの拡張機能でPython,JupyterNoteBookをインストール
あとは、.pyファイルや.ipynbファイルを作るだけでＯＫ
ターミナルでpip installするときに、pipというコマンドがありませんみたいなことを言われたら、環境変数にpythonが設定されていないということ。
環境変数にpython.exeのパスと、Scriptsフォルダ（pipの実行ファイルがある場所）のパスとLIBのパスを設定したらうまくいった

以上、簡単なメモでした。
Google CloudのCompute EngineのMachine Typeについて

## What's This
記事にするようなことでもないかもですが、メモとして残します。（まあ私の記事は大体そんなものです。w）
Compute Engineのタイプについて気になったので、調べてみました。

## Compute Engineの種類

### 汎用ワークロード（E2、N2、N2D、N1）

```
価格とパフォーマンスのバランスに優れた汎用マシンで、
データベース、開発環境、テスト環境、ウェブ アプリケーション、モバイルゲーム
などの一般的な幅広いワークロードに適しています。最大 224 個の vCPU と 896 GB のメモリをサポートします。
```

General Purpose的な感じですかね。

### 超高メモリ（M2、M1）

```
メモリ最適化マシンは、メモリ容量が最も高い構成のマシンで、
単一のインスタンスに最大 12 TB のメモリを搭載できます。
このマシンは、SAP HANA などの大規模なインメモリ データベースや、インメモリ データ分析など、
メモリ使用量の多いワークロードに適してします。
```

データ分析。なるほど。Microsoft SQL Server などのデータベースが該当するっぽい。

### コンピューティング負荷の高いワークロード（C2）

```
コンピューティング最適化マシンは、Compute Engine 上での 1 コアあたりのパフォーマンスが最も高く、
ハイ パフォーマンス コンピューティング（HPC）、ゲームサーバー、レイテンシの影響を受けやすい API などのワークロードでの使用に適しています。
```

Gaming Applicationみたいに、多くのCPUが必要、みたいなのはこのC2を選んだ方が良さそう。

### 特に要求の厳しいアプリケーションとワークロード（A2）

```
アクセラレータ最適化マシンは、NVIDIA Ampere A100 Tensor Core GPU を基盤としています。
A100 GPU は、旧世代の GPU と比較して、GPU 1 個あたり最大 20 倍のコンピューティング パフォーマンスを誇ります。
これらの VM は、機械学習やハイ パフォーマンス コンピューティングなど、特に要求の厳しいワークロードのために設計されています。
```

あのDeepMind社がこのマシンタイプについてコメントしている。
https://cloud.google.com/blog/ja/products/compute/a2-vms-with-nvidia-a100-gpus-are-ga

やはりMLでパフォーマンス求めるなら、これなのかも。

### スケールアウト ワークロード（T2D） - 近日提供予定

```
T2D は、他の主要パブリック クラウド提供事業者の汎用 VM と比較して最も低コストでサービスを提供しています。
T2D は、Tau VM ファミリーの最初のインスタンス タイプで、VM あたり最大 60 個の vCPU、vCPU あたり最大 4 GB の
メモリを備えた事前定義済みの形態で提供されます。T2D は、ウェブサーバー、コンテナ化マイクロサービス、
メディアのコード変換、大規模な Java アプリケーションなどのスケールアウト型ワークロードに最適です。
```

まだ提供はされてないっぽいけど、これもある。
Scale outに向いているようだ。
Scale out、とあったので、GKEとなんか関係あるのかな？と思って調べたら、やはりある模様。
https://cloud.google.com/blog/ja/products/compute/google-cloud-introduces-tau-vms#:~:text=Google%20Kubernetes%20Engine%20%E3%81%AE%E3%82%B5%E3%83%9D%E3%83%BC%E3%83%88

しかし、この一文、強いですね。

```
Google Kubernetes Engine（GKE）は、高度なコンテナ オーケストレーションを求める組織にとって
事実上の標準であり、最高レベルの信頼性、セキュリティ、スケーラビリティを提供します。
```

## Machine Typeの読み

**Example : e2-standard-2**
**e2 - Machine type Family**
**standard -Type of Workload**
**2 - Number of CPUs**

![スクリーンショット 2021-12-17 21.04.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1740345/0455891e-a2c2-8fbd-07a6-bccf1cdde0d1.png)

![スクリーンショット 2021-12-17 21.05.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1740345/0855cf49-3fa2-d1f3-ec03-0d8d33e855a7.png)

memory,disk,networking capabilityは、vCPUに応じて変化するみたいですね。

## 参考

```
https://cloud.google.com/compute
https://cloud.google.com/compute/docs/general-purpose-machines
https://cloud.google.com/blog/ja/products/compute/google-cloud-introduces-tau-vms
https://cloud.google.com/compute/docs/cpu-platforms
https://cloud.google.com/compute/docs/machine-types
```
工場系データサイエンティストがスマホアプリのデータ分析をやってみた話

こんにちは
本日の[データラーニングギルドアドベントカレンダー19日目](https://qiita.com/advent-calendar/2021/data-learning-guild)を担当しますOtteyです！
今回は、データラーニングギルド主催の分析プロジェクトに参加し、スマホアプリ「英語物語」のデータを分析しましたので、その内容を書きたいと思います
※昨日Akiさんが掲載したブログと同じプロジェクトとなりますので、ぜひそちらもご覧ください！

#軽く自己紹介
2021年7月より**製造工場系データサイエンティスト**として、不良要因分析やデータの可視化・コスト最適化のサポートをしています
（前職は半導体商社で海外半導体製品の技術営業職をしてました。）
ちなみにQiita初投稿です！！！

#今回分析した「英語物語」とは？
今回分析した英語物語を軽く説明すると

- ストーリーと英語学習クイズを楽しみながら、自然に英語を学習できるアプリ！
（しかも、問題はユーザーのレベルに応じて出題されるので、英語力が弱い人でも安心して遊べます） 

- 2万件を超える高評価レビューを獲得している等実績も挙げているアプリです！

※詳しくは[公式HP](https://eigomonogatari.com)を見てください！
#スケジュールと分析内容
今回の分析プロジェクトは下図のような形で進め、使ったツールはSQL(BigQuery上)とExcelです！ 
 ![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2308705/1038378a-9357-623e-e861-21437475fef1.png)

このアプリのペルソナとして**「学習意欲あるけど、ソシャゲしちゃう人」** とのことだったため、そんなソシャゲしてしまう人の課金金額向上に繋げる施策を提案できないかと思い、下記の分析①〜③を進めました

##分析①　課金ユーザーの動向分析
課金ユーザーの動向分析として初回登録から初課金するまでの日数を調査したところ、
初回登録してその日に課金しているユーザーが**６割程度**もいることが判明！
このことからこのアプリでは初めから課金意欲のあるユーザーが多いと考えました。
![図2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2308705/a5bc92fa-a86f-05d7-6f44-a0d1d3b2bebb.png)

このようなユーザーに対しては、初回登録時限定のアイテムを販売、またはサブスクといった初回登録時の課金を促す取り組みを実施することで、顧客単価向上に繋がりそう!

 

##分析②　課金アイテム分析
課金ユーザーが購入したアイテム状況を確認するため、アプリ内のアイテム毎の購入数、購入金額を調査
すると、購入数では**“tengachbuy”**という10連ガチャのアイテム、購入金額では**”chocolate_400_new”**というアプリ内のお金のようなもの（ガチャ等で使用）がトップにきてました。
![図3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2308705/f7371ebb-1957-97d4-3bdc-6d9f9d2f59da.png)


分析②の結果でガチャで使用するアイテムがトップにきていることから、10連ガチャやガチャ回数を伸ばす施策が課金金額（顧客単価向上）につながりそうだと推測！ 

##分析③　ガチャイベント別の10連ガチャ・ガチャ回数調査
10連ガチャやガチャ回数を伸ばす施策を検討するため、ガチャイベントごとの1日あたりの回数を調査
結果はどちらも**“春爛漫四聖獣ガチャ”**がトップにきていることを確認しました
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2308705/000a2e9b-79a9-10aa-7242-d2d588982630.png" width=90%>


例えば、**“春爛漫四聖獣ガチャ”**と他のガチャイベントとの差異（実施時期やガチャで出てくるキャラクターの特性など）を調査、それを新しいガチャイベントで取り入れることで更なるガチャ回数や１０連ガチャ向上、強いては顧客単価向上に繋がると推測！
 
#今後分析するとしたら・・・
今回の分析では、アイテムやガチャからのアプローチで分析を進めたが、残念ながら英語問題に関する回答履歴等のデータセットがなかった。
（このアプリのもっとも重要な部分の分析ができなくて残念。。。。）
そこで、今回のプロジェクトのなかでデータセットの提案も少ししてみました。

提案内容としては以下の形です。
**案①：アプリユーザーデータに各学習範囲（カテゴリー）ごとのレベルを追加**
![図5png.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2308705/fdc443e5-cb84-eb97-af75-2a209c6e110d.png)

**案②：アプリで出題された問題の回答状況をまとめたデータセットを作る**
![図6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2308705/0f99e5f2-3db9-1003-b300-665df6e7f716.png)

上のデータセットを使って、ユーザーが解いた問題数や学習設定で課金金額やアプリの継続率変わるかを調査することで、**問題の出し方の改善につなげたり、英語学習に繋がるイベント企画に有用な情報を提供できたり・・・**できるかと

#今回の分析を振り返って・・・
今回の分析を振り返りポイントは、下記の通り

- ゲーム業界特有の指標（継続率・色々な横文字など）を理解する場になった
- 業界ごとに分析のアプローチに違いがある
- 分析を進める上では顧客とのコミュニケーションが不可欠（データの集計方法など）
- 取れるデータには限界がある（システムの限界、時間の限界・・・・）

特に違う業界の分析をすることはすごい良い刺激・経験となりました
今回に限らず、これからもいろんな業界のデータを分析していきます！
（誰か分析コンペやプロジェクト一緒にやりましょう笑）
refinarycmsの使い方

# 概要
・refinarycmsについての記事が少ない
・versionによってうまく動かない方法が多い
　などの理由で使い方を習得するのに苦労したので作成方法をまとめます

#準備
RefineryはImageMagickに依存するので、まずそれからインストールします。
OSXの場合一番簡単なのはHomebrewを利用する方法です。必要な作業は以下のコマンドを実行するだけです。

``` :terminal
$ brew install imagemagick
```
# 実装
## install
Refinery gemをインストールします。

``` :terminal
$ gem install refinerycms
```
## create application
新規のRefineryアプリケーションを作成するために、refinerycmsコマンドをアプリケーション名を指定して実行します。 
 
``` :terminal
$ refinerycms refinary_sample 
```
※refinary_sampleはアプリ名なので自由に変えてください

## 動作確認
アプリに移動してrailsを起動させます。

``` :terminal
$ cd refinary_sample 
```
``` :terminal
$ rails s
```
http://localhost:3000/refinery にアクセスするとユーザー登録画面が開きます。
アクセスが確認できれば、無事に初期設定は完了です。これでサイトの作成が可能です！！
ただし、このままではデザインや設定が初期状態ですので、以下でサイト名の編集と日本語化を行ます。
# 編集
## サイト名の編集
ここで設定した名前はHTMLのソースのtitleタグの値に使用されます。
エディタで直接開くか、以下のviコマンドを使って開きます。

``` :terminal
$ vi config/initializers/refinery/core.rb
```
```core.rb
# Site name
- # config.site_name = "Company Name"
+ config.site_name = "my site name"
```
デフォルトではCompany Nameになっているので、`# config.site_name = "Company Name"`のコメントアウトを外して自分の好きなサイト名をつけます。
## 日本語化
初期状態では言語が英語のままなので、日本語化します。

``` :terminal
$ vi config/initializers/refinery/i18n.rb
```

```i18n.rb
- # config.default_locale = :en
+ config.default_locale = :ja
- # config.current_locale = :en
+ config.current_locale = :ja
- # config.default_frontend_locale = :en
+ config.default_frontend_locale = :ja
- # config.frontend_locales = [:en]
+ config.frontend_locales = [:ja]
```

さらに、seeds.rbの行頭にlocaleの設定を追加します。（これをしないとトップページの初期データが日本語化せず、編集できなくなります。）

``` :terminal
$ vi db/seeds.rb
```
```seeds.rb
+ I18n.locale = ::Refinery::I18n.default_locale
```
``` :terminal
$ bundle exec rails db:seed
```
サーバ起動後に管理画面（http://localhost:3000/refinery） にアクセスし、日本語になっていたら完了です。

## 参考文献
https://qiita.com/tbpgr/items/4a4890bc870b541a3d03
https://www.farend.co.jp/blog/2019/01/refinerycms/
http://railscasts.com/episodes/332-refinery-cms-basics?language=ja&view=asciicast
N予備校プログラミングコースを受講しています。

# N予備校プログラミングコースを受講しています。（９ヶ月時点での感想）

## 自己紹介

こんにちは～～！ふーちんです。

- 好きなもの：プログラミング、slack、果物
- プログラミングで何したい？：言語を作ってみたい！
- 今どんなこと勉強してる？：Git、Cookie、脆弱性

## 今までは

N予備校受講のきっかけは、昨年のN予備校の1年間無料開放キャンペーンがあったことでした。
その時は、今では簡単だと思える第1章ですら理解できませんでした。
その後2章には進まず、WebデザインHTML・CSSデザインコースを進めました。そこで大体HTMLとCSSはわかってきました。
でも、JavaScriptはまだまだ理解できませんでした。

その後また春が来ると、もう一度プログラミング入門コース第1章からやり直そうと思って始めました。その時は生授業にも参加しました。
前までわからなかった `document.getElementById();` の意味もわかりました。
その時、1週目、2週目、と続けると理解しやすいことを実感しました。

## 今は

今授業では、いろんなhttpモジュールを読み込んだり脆弱性を見つけて対応したりしてますが、 すごく難しくて、がむしゃらに写経しているだけだから、このままやっていけるのか心配になります。
だから来年、2週目も頑張ろうと思います。
これからもよろしくお願いします。（来年忙しくなってワンチャン無理かも）

## 授業とは別にやってること

- Qiitaの記事を書く
- Qiitaに投稿された面白そうな記事を読んで、  
progedu slack（N予備校プログラミングコースのワークスペース）の授業_情報共有チャンネルにリンクをはる
- slackでチーム開発の練習

## N予備校や、先生の良いところ

### なんといってもコメント機能！

N予備校は、ニコニコ動画を作った株式会社ドワンゴが作り、ニコニコ動画と同じくコメントが画面に流れてきます。
僕は、それはとっても良いことだと思います。
流れてくるのと、ただ一覧が表示されるのとでは、流れてくる方がコメントに気づきやすく、一定時間は必ず画面に表示されるからです。
ただの一覧だと、たくさんコメントが流れてきたとき、その前の投稿を見るにはスクロールしなくてはなりません。だからコメントが流れてくるというのは、とても便利だと思います。

### slackは便利！

slackはとても便利だと思います。授業中の雑談は、コメントを送る事こともしますが、slackでも雑談を盛り上げます。
長い説明はslackで、それに対してのリアクションや質問もslackでします。
また、チーム開発の練習や、授業の予習もこのslackを使ってできます。授業の予習をしているとき、zoomなどは使ってないのに、まるでそこにいるくらいの近さで、プログラミングをしているように感じます。

### 手厚い先生！

先生もすごく親切です。毎授業、コメント入りの、ソースコードをslackに貼ってくれます。
面白いコメントをすると笑ってくれます。
slackの娯楽用のチャンネルにも参加してくれます。授業とは別にチーム開発練習をしていますが、アドバイスしてくれます。
通常授業とは別に、座談会やレベルアッププログラミング授業を開いてくれます。
また、積極的に特番を開いていこうと考えているそうです。とても嬉しいです。

## N予備校の改善してほしいところ

### テキスト関係

- テキスト中のリンクは新しいタブで開くようになっていないところがあるから、全部新規タブで開くように統一して欲しい。
- 先生が、コメント入りソースコードをslackに貼ってくれているが、もともと、テキストにソースコード中にコメントをたくさん入れてほしい。
- テキストに授業のリンクをはってくれたらいいと思う。

### 授業関係

- コメント一覧表示機能の「運営：放送中」とかなんとかいろいろが邪魔だと思ってしまった。 
- 生授業終わったらアーカイブの準備、僕は早くアーカイブ見たいと思ってるから早くできるのあればそうして欲しい。

## 最後に

僕はまだまだ初心者です。slackでできた友達と一緒にたくさんのことにチャレンジしています。
写経ばかりで時々挫折の雨が降ったり、たまに授業に追いつけてなかったりしますが、なんとか頑張ってます。だから来年も頑張ろうと思います。
これからもよろしくお願いします。
Windows 11 で ssh を使って git clone できなくなった

# 問題点
Windows 11 で開発環境を整える際、ssh で git clone しようとしたが、下記エラーが出て取得できなかった。

```ps1:powershell
Cloning into 'hoge'...
Unable to negotiate with 192.168.***.*** port *****: no matching host key type found. Their offer: ssh-rsa,ssh-dss
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
```
## 発生条件
1. Git バージョンは 2.34.1
2. Windows 10 では問題なく動作する
3. Git GUI の help から生成したキーを使用した。(RSA)
4. Git サーバーに ssh 接続はできた。

# 解決方法

下記サイトを参考にして、~/.ssh/config に設定を追加した。（無ければ作成する）
環境は違うが、どうやら ssh クライアントがバージョンアップしたことが原因のようだ。
[Security Log - OSをアップデートしたらDSAのssh-keyが使えなくなってしまった人へ](http://root99.blogspot.com/2019/01/osdsassh-key.html)

```text:config
Host *
        HostKeyAlgorithms +ssh-rsa
        PubkeyAcceptedKeyTypes +ssh-rsa
```
SSH接続でpushしようとしたところ、GitHubにアップされない事象について(Mac)

### はじめに

エンジニア初心者が書いたメモ書きなので、実際に作業する際はご注意下さい。

---

### 事象

GitHubにアップしようと、ターミナルで下記のコマンドを実行するも、GitHubにアップされていない。
`git remote set-url origin < URL >`

---
### 対処

GitHubでSSH鍵の設定登録することでターミナルからコマンドを実行してアップされるようになった。

---

#### 設定方法

1.GitHub用の鍵を作成するため、`.ssh`のあるディレクトリまで移動。

```
% cd ~/.ssh
```


2.GitHub用の鍵を作成する。

```
% ssh-keygen
```
コマンドを実行すると、`.ssh/id_rsa.pub`が作成されるので、作成された鍵をcatで確認。

```
% cat id_rsa.pub
```

3.`cat`コマンドで表示された内容をコピー

4.`GitHub`の`Settings`から`SSH and GPG keys`を開く。

5.`SSH keys`の`new SSH Key`をクリック

6.`Title`に好きな名前をつけ、`Key`に`3.`の手順でコピーした`Key`を貼り付け、`Add SSH Key`をタッチすれば、設定完了。

---

#### 設定の確認

下記のコマンドを実行して、`successfully` のメッセージが出ていれば設定出来ていることが確認できる。

```
$ ssh -T github.com
Hi <GitHubのusername>! You've successfully authenticated, but GitHub does not provide shell access.
```

＜翻訳＞
こんにちは`<GitHubのusername>!` 認証に成功しましたが、GitHubはシェルアクセスを提供していません。
シェルは使えないみたいですね。

### 最後に
エンジニア初心者の記事なので、間違っていることもあるかもしれませんが、何かの解決に役立てばと思います。
BigQueryにサブクエリのエイリアスを優先されてorder byがエラーになった話

# はじめに

とある別DBのSQLをBigQueryで実行した時のこと。
最初からBigQueryで書く場合は、凡ミスとしてすぐ気づき、この事象に悩むことはないかもしれません。

が、今回のように別DBでは動くがBigQueryではエラーが出たケースです。

DBやデータをBigQueryに移した後同じクエリを実行しときは割と対面するようなので
そんな方は参考になるかなと思います。

## 例題テーブル

こんなテーブルを使います。
dataset: babynames
table_name: names2021

|column|type|
|--|--|
|name|STRING|
|gender|STRING|
|cnt|INTEGER|

### 正常クエリ

```sql
select
    name
    ,ranking
from (
  select 
    name
    ,cnt as ranking
  from
    babynames.names2021
) as ranking
```

この場合、クエリは成功しました。

## エラーになるクエリ

```sql
select
    name
    ,row_number() over(partition by gender order by ranking)  as gender_rank
from (
select
    name
    ,gender
    ,cnt as ranking
from
    babynames.names20121
group by
    name
    ,gender
    ,cnt
) as ranking
```

すると・・・・


```
Ordering by expressions of type STRUCT is not allowed at 
```

こんなエラーが出ました。

### 原因

cntカラムのエイリアスとサブクエリのエイリアスがrankingという名前で重複しています。
order byで指定した名前は、サブクエリ内のカラム名よりサブクエリのエイリアス名が優先されたため
サブクエリのテーブルをSTRUCT型としてorder byしてるとみなされてエラーになりました。

STRUCT型についてはこちらを参照。

https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types#struct_type

### 解決策

名前を被らないように変える。という手が一番手っ取り早いです。

```sql
select
    name
    ,ranking
    ,row_number() over(partition by gender order by ranking)  as b
from (
    select
        name
        ,gender
        ,count as ranking
    from
        babynames.names2010 
) as ranking_table

```



が、テーブルとして認識されたことを踏まえて操作したところ
(ちょっと気持ち悪いですが)以下のような書き方をすることでも解決は可能だったので記載しておきます。

```sql
select
    name
    ,ranking
    ,row_number() over(partition by gender order by ranking.ranking)  as b
from (
    select
        name
        ,gender
        ,count as ranking
    from
        babynames.names2010 
) as ranking

```



### 結論

もしorder by して STRUCT is not allowedって言われたらお名前の付け方が怪しいかもしれません。
参考になれば幸いです。
APIを1分で理解する。改めてAPIを超簡単に説明するよ

##APIって結局何？ 
どこかの記事で、全てのウェブサービスはブログである　みたいな記事を読んだような気がするのですが、確かに、ショッピングサイトでも、SNSでも、メールでも、映像配信サイトでも、結局基本は同じで  
**フロントからリクエストが来る→サーバーでそれを処理して、データベースから必要な素材を取ってくる→素材をサーバーで料理して、フロントに返す→フロント側は返ってきた料理を綺麗に盛り付けして表示**  
って事だよね。 
で、ここでコアな役割を担っているのがAPI。 
自分も、APIって色んなところで聞くし、実際にAPI構築用のコードを打って、それっぽく動いてるんだけど、その実態って、あんまりよく分かってなかったんだよね。 
英文、和文を問わず、いろんな人の解説を読むんだけど、やっぱりよく分からない。 
なぜ分からないかというと、みんななんかフワッと書いていて、分かったような気になるけど、結局分からない。それと、APIそのものが、結構定義づけがあいまいで、指し示している範囲が広く、みなそれぞれの解釈で理解してるから、言ってることがバラバラだったりする。で、結局なんやねん！と突っ込まざる得なくなる。
で、最近こういう事だったのか！とこれまた自分なりに完璧に理解した！と思ったので、ここに書き散らしておく。 
**インプットと、アウトプット用の穴が二つ開いた箱をイメージして欲しい。これがAPIである。**以上。
![api.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1204968/9ef99670-3c39-5f84-63e4-74d9f2323cf2.jpeg)

そう、これがAPIだ！！！ 
##APIはあくまでインターフェイスの事
もう少しちゃんと解説すると、APIとは、Application programming interface で、**あくまでもinterfaceの事**。なんかアプリケーションと勘違いしてる人も多い。あと、何らかのバックエンドの機能とか。 
インターフェイスって、自販機みたいなもので、ユーザーとシステムの間に立って、人の注文をシステムに伝えてくれる表面の色々な機能。自販機のボタンとか、お金を入れるところとか、釣銭が出るところとか。あれがAPI。自販機の中で行われていることはAPIではない。 
さらに分かりやすく言うと、ドライブスルー。 
![drivethrow.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1204968/d04d598c-3fab-a110-cf1d-63d70c0525a9.jpeg)
小窓で所定の方法で注文する（ブラウザからのリクエスト）　→　オーダーが厨房に伝わり、冷蔵庫から材料を取り出し（データベースから必要なデータを取り出す）、キッチンスタッフが調理（サーバーでデータを処理）→　もう一つの小窓から出来たオーダーを渡す。（ブラウザにデータを返す） 
**この小窓の部分がまさにAPI**。普通、APIって、クエリとかを含んだ長いURLを叩くよね。あのアドレスが小窓の場所を指定していて、さらにクエリが注文の内容って感じ。 
で、例えばNODE.JSとかで厨房の部分を構築するわけだ。つまり、サーバー側プログラミングでは、どういうオーダーが来れば、どのデータを取りに行って、どう調理するのかっていうのを構築出来る。 
サーバー側バックエンドについてる、クライアントからのデータをやり取りする小窓がAPIで、厨房がいわゆるバックエンド。で、持ち帰って皿に美味しそうに盛り付ける部分がREACTやAngularっていうフロントエンドになる。最近は、APIと聞くと、どうしてもウーバーイーツのドライバーが走っているイメージが止まらなくなってしまう。 
ざっくりとしたイメージだけど、抽象的な概念って、分かりやすいイメージで覚えるっていうのが近道だと思うので、簡単に記事にしてみたよ。 
あくまでも、初心者の人に向けたあれなので、あんまりあれな突っ込みはご容赦ください。
WordpressプラグインのBogoを利用中、設定→一般画面の言語設定のセレクトボックスが強制的に英語になる問題

翻訳サイトを作成するのに有名なbogoというプラグインがありますが、それを利用しているサイトで油断をすると**強制的にサイトのトップが英語サイトになる**不具合が発生。

## 経緯
ことの発端は
「トップページが急に英語になった！重大な事態です！」
っていうクライアントからの連絡から始まった。
担当窓口のディレクターややり取りをみていたコーダー他もトップページにアクセスしたら英語になったと大騒ぎ。

ただこの手の話は実は検討が付いていて、Wordpressでは**サイトの言語設定**という枠があり、bogoを利用している場合これの設定によってトップページが強制的にその言語がデフォルトスケールとなりテンプレートなどで言語切り替えをしている箇所が全てその言語に切り替わってしまう仕様があった。
以前も誤操作によって言語が切り替わってしまっていてこちらでbogoの言語管理設定画面からサイトの言語設定を日本語に戻して対処したことがあったので同様の操作を行って動作確認して解決の連絡をいれた。

## 再発

少しするとまた変わった！なんぞ？！と大騒ぎしているので再度「左メニュー→言語→言語パック」にて日本語がサイトの言語に設定されているのを確認。
ワンチャンキャッシュプラグインによる静的キャッシュが残ってるのかと思いキャッシュを消したがどうにも合点がいかない。
そこでふと「左メニュー→設定→一般」にも「サイトの言語」という枠があったのでそこを確認してみる事に、

するとなんということでしょう、**Englishが選択されてる状態じゃありませんか**

？？と思いつつ日本語を選択して保存ボタンを押下、再度一般画面が表示されるとサイト言語のセレクトボックスはEngishが選択されているまま。。

軽く調べたら[フォーラムでおなじ現象で困ってる人](https://wordpress.org/support/topic/%E8%A8%AD%E5%AE%9A%EF%BC%88%E4%B8%80%E8%88%AC%EF%BC%89%E3%81%AE%E3%80%8C%E3%82%B5%E3%82%A4%E3%83%88%E3%81%AE%E8%A8%80%E8%AA%9E%E3%80%8D%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/)を発見。


## 検証
bogoプラグインを無効化すると問題なく上記の挙動はおこらなかったこと、
一般画面を表示させたとき**一瞬で日本語からEnglishにセレクトボックスが切り替わった**ことからJavascriptがやらかしてると断定。
するとセレクトボックスのIDを参照しているわかりやすいコードを発見

```javascript:/plugins/bogo/admin/js/admin.js
$( function() {
		$( 'body.options-general-php select#WPLANG' ).each( function() {
			$( this ).find( 'option[selected="selected"]' ).removeAttr( 'selected' );
			var val = bogo.defaultLocale || 'en_US';
			val = ( 'en_US' == val ? '' : val );
			$( this ).find( 'option[value="' + val + '"]' ).first().attr( 'selected', 'selected' );
		} );
	} );
```

・・これいる？ｗ

## 結論

上記をコメントアウトしてアップしたところセレクトボックスが変わっちゃう問題は解決しました。
なお、bogo最新版の5.3.3でも発生しているので、bogoプラグインのバージョンアップしても同じ挙動が起こると思われます。
Wordpressのダウングレードとかプラグインダウングレードとかしなくて結構です。
でもこれbogoプラグインアップデートしたらまた同じ挙動が再発するんだろうな。。頼むぜbogoさんや。
DockerでPCにインストール済みのComposerを使いたい

~~windowsPCでDocker使っていて、すでにPCにComposerインストールしてるのにDocker内でもComposerインストールするのなんとなく嫌だな...と思ってたらちゃんと解決策がありました。~~

コメントで指摘していただいたのですが、この方法だとPCのComposerではなく、Composerの公式からイメージをコピーしてきている、とのことでした。
理解不足ですみません。

以下はコンテナ起動時にComposerのイメージをコピーし、そちらを使用できるようにする方法です。

こちらを参考にさせていただきました。ありがとうございます。
https://qiita.com/yatsbashy/items/02bbbebbfe7e5a5976bc

```text:Dockerfile
FROM php:7.4-fpm

COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
```

ついでにLaravelで必要なものも入れてみました。
最終的にこうなりました。

```text:Dockerfile
FROM php:7.4-fpm

RUN apt-get update && apt-get install -y \
libfreetype6-dev \
libjpeg62-turbo-dev \
libpng-dev \
libzip-dev \
zlib1g-dev \
&& docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install -j$(nproc) gd exif zip

COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
```
プリザンターでも愛し愛されルックアップ。

この記事は Pleasanter(プリザンター) Advent Calendar 2021の17日目の記事です。

## はじめに
プリザンターは、オープンソースで公開されている"ビジネスアプリケーションプラットフォーム"です。
噛み砕いていうと、業務アプリの基盤、ということになりますが、キャッチフレーズである"ローコード開発プラットフォーム"も合わせて咀嚼すると、ローコードで業務アプリが開発できる基盤、ということになるでしょうか。
要するに、業務アプリが簡単に作れる"ヤツ"。しかも、無料で！
という大雑把な理解で良い気もしますが、誰かに怒られそうな気もします。

## エクセルから解放されるヤツ
いわゆる脱エクセル。
エクセルの呪縛から解き放たれるためのベストプラクティスとも言えるのがプリザンターではないでしょうか。
エクセルのように汎用的で、エクセルの苦手な所も補完もできる、でもちょっと苦手な所もある、そんなプリザンター。
どこがどうという比較は長くなりそうなので割愛しますが、とにかくエクセル業務から解放されて、もっと仕事を楽にしたい。でも、実際問題どうすれば……？
そんな方には以下のコラムが良い感じです。

[【Excel業務を改善しよう！】第1回　プリザンターではじめる業務改善 \| Pleasanter](https://pleasanter.org/blogs/column-ctcs01-1)
[【Excel業務を改善しよう！】第2回プリザンター化モデルで業務を可視化・分析してみよう！ \| Pleasanter](https://pleasanter.org/blogs/column-ctcs01-2)
機能にフォーカスするのではなく、適切な業務改善を行うための考え方、という視点でのお話は非常にためになります。まだ連載途中ですが、はやく続きが読みたい。

## エクセルっぽくて便利なヤツ
エクセルには数多くの、おそらく9割以上は使ったことが無いどころか聞いたことも無いであろう数多の関数が存在します。
そんなエクセル関数の中でも最も愛されている関数がVLOOKUPです(断言)。
だって、天下一武道会でも1位だったし。擬人化されたVLOOKUPちゃんもかわいいし。

Excel関数天下一武道会　①最終結果｜Excel医ブログ
https://excel-design-dr.com/function-tournament-01/

「エクセル関数ちゃんカード VLOOKUP関数」 / Twitter@Tsutsui0524
https://twitter.com/Tsutsui0524/status/1398049153716867073

そんな超便利なルックアップちゃんですが、プリザンターにも標準機能として今年の5月についに実装されました。

テーブルの管理：エディタ：項目の詳細設定：選択肢一覧：ルックアップ | Pleasanter
https://pleasanter.org/manual/table-management-lookup

ルックアップ機能が実装されるまでは、同じようなことをJavaScriptで実現させていました。
FAQ：サンプルコード：親テーブルの項目の値を子テーブルの項目に転記する | Pleasanter
https://pleasanter.org/manual/faq-lookup-posting

ルックアップ機能は、JSON形式で記述する必要があるので一癖ある感は否めませんが、マニュアルに記述されているものをコピペしてサイトIDや対象項目を変更してあげれば使えるので、それほど毛嫌いせずにかわいがってあげましょう。

ただ、ここで注意が必要なのは、プリザンターのルックアップ機能は、転記である、ということです。
エクセルのVLOOKUPは、マスタ側の値を変更すれば、トランザクションデータも変更が反映される「参照」なのですが、プリザンターの場合は操作時点の値が「転記」されます。ですのでレコードを作成・更新したあとにマスタの値を変更しても自動では反映されません。
上にあげたJavaScriptのサンプルは、編集画面を読み込むタイミングでも転記を実行するので、実質的には参照っぽい動きにはなりますが、やっていることは転記ですので、編集画面で最新の値を取得できていても更新しない限りは一覧画面では古い値のままとなります。まあ、一覧画面にはリンクしたテーブルを表示できるので、親テーブルの項目を有効化しておけば良いのですが。

## おわりに
なんだかんだでエクセルは便利だし、使い慣れているしで、やっぱりエクセルとの腐れ縁はまだまだ続きそうです。
プリザンターにさえ、気がつけばいつのまにかエクセルっぽさを求めてしまう。そんな機能あるはずもないのに。
そんな歌を歌っていたのは山崎まさよしさんだったでしょうか。わかるよ、その気持。

そんなわけで、雑な記事になってしまいましたが、以上です。ありがとうございました。
アクセシビリティは現実を拡張する、あるいは現実を拡張しようとする試みはアクセシビリティの本質に近いのだなと思った話

サイオステクノロジーの伊藤です。金融システムのUI設計などを専門にしています。
こちらは[アクセシビリティAdvent Calendar 2021](https://adventar.org/calendars/6197)の参加記事です。

今年はあまり外向けにアウトプットできる活動は無かったのですが、たまたま見かけた海外の[Inclusive Design 24](https://inclusivedesign24.org/)というイベントで、興味のあったVRなど拡張現実と障害というテーマの発表をみかけ、UDトーク協力をさせてもらいました。

柳川健二さんの「Can People with Disabilities Use VR? / 障害があってもVRを使えますか？」という発表で、発表そのものは日本語ですがUDトークによるリアルタイム多言語文字起こしを提供する意欲的なものでした。
50分程度の発表ですが、Youtubeで公開されていますので、ぜひご覧ください。


<iframe width="560" height="315" src="https://www.youtube.com/embed/YBTOaGgS6cQ" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

<p></p>

動画では字幕の多言語化や自動翻訳、キャプションの読み上げなどの事例を紹介しています。また、近視や老眼、色覚障害をVRで体験できるアプリ、リズムゲームを振動によるフィードバックで楽しむ聴覚障碍者の事例などが印象的です。
特にVRを使ってお年寄りに疑似的な旅行を楽しんでもらう事例などは、さまざまな障害を越えて世界にアクセスすることを可能にする技術としてのVRの可能性を感じさせるものでした。何より楽しそう。

柳川さんより「VRの可能性」として挙げられているのは以下の4つ。

- 支援技術/医療
- 障がい者の身体性の理解
- 健常者と障がい者の架け橋
- 情報格差是正

また、可能性以外に障害のある方がこうした技術を利用しようとしたときにおきる課題として、四肢が不自由な方はコントローラーの利用がそもそも難しい、動きに制約があるなどの課題にもきちんと触れています。
気になる方は動画をご覧ください。

障害のある方がVRを利用する場合に発生する課題については、実はW3Cも意識しており、2017年とちょっと古いものですが、[Accessibility of Virtual Reality](https://www.w3.org/WAI/APA/task-forces/research-questions/wiki/Accessibility_of_Virtual_Reality
)というWikiによるノートがあり、また[WCAG3.0のドラフト](https://www.w3.org/TR/wcag-3.0/)EDITOR'S NOTEにも、以下のようにあります。

> This guideline demonstrates how the WCAG3 structure can be used with emerging technologies such as virtual reality, augmented reality and other immersive web technologies (XR). Research in this area is ongoing and we expect to complete more details in future drafts.

この点についてはやはりこの分野の先進企業であるOculus（いまはMeta Questが正しい？）の開発者に向けたガイドによりたくさんの示唆がありましたので、これも動画を紹介します。

Designing Accessible VR Experiencesというこの動画では、アクセシブルなデザインがアプリに参加できるユーザーを広げることについて、様々な具体的な方法を紹介しています。

<iframe width="560" height="315" src="https://www.youtube.com/embed/yFVPMYDO_OE" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

私が特に感銘を受けたのは字幕の重要性についての部分で、発話者とその発話された方向がついた字幕が、自分の視線に追従して表示されるものです。
このようにすると、ゲーム内でとても自然に誰がどの方向から話しかけてきたのか、聴覚が不自由であってもわかります。

拡張現実とWebがどこまで重なってくるのかまだわかりませんが、このビデオで紹介されたような手法は、W3Cのガイドラインにも盛り込まれていくのかなと感じました。

いずれ自分も体が衰え、目も耳も不自由となったとしても、このような技術の発展があれば世界にアクセスしつづけ、楽しく生きられるかもしれない。現実を拡張しようとする試みは、そのような可能性をもっていると思います。楽しみですね。（最後急にポエム）

では今年はこのへんで。
明日はゆうてんさんによる「[フォーカスアピアランスの達成基準についての考察](https://zenn.dev/yusukehirao/articles/964b9169d7616e)」です。
楽しみですね。

最後に、このキーワードで引っかかった人の一万人に一人でも何か心に残ったらいいなと思って叫んどきます。

# メタバース!
cargo-make で `yarn` または .cmd などの実行形式のコマンドを Windows も含めて処理する方法のメモ

# この記事で解決したいこと

`cargo-make` をWindows 環境にもクロスプラットフォーム対応したいプロジェクトで採用したところ、 `yarn` などの一部のコマンドの処理で `NotFound` エラーにより実行不能となるトラブルに見舞われた。どうにかしたい。

# 例

プロジェクトの一部に npm パッケージを `yarn` したいワークスペースがあり下記のように `yarn` を `command` とした `Makefile.toml` を記述した。

```Makefile.toml
[tasks.repro]
args = [ "build" ]
command = "yarn"
```

↓ `cargo make repro` を Windows 環境で実行

```
[cargo-make] INFO - cargo make 0.35.7
[cargo-make] INFO - Build File: Makefile.toml
[cargo-make] INFO - Task: repro
[cargo-make] INFO - Profile: development
[cargo-make] INFO - Running Task: legacy-migration
[cargo-make] INFO - Execute Command: "yarn"
[cargo-make] ERROR - Error while executing command, error: Error {
    kind: NotFound,
    message: "program not found",
}
[cargo-make] WARN - Build Failed.
```

# 原因と回避方法

## 原因

`yarn` を一般的な GNU/Linux や Mac へ導入すると実行形式のコマンド本体は shebang を伴うテキスト形式のスクリプトファイルで適当な拡張子を持つファイル名であっても一般的には PATH の効いた場所に拡張子の無い実行可能なシンボリックリンクが生成される。しかし Windows ではファイル名の拡張子への実行処理の依存性が高く、また広義的にシェルに相当する処理系での拡張子への関連付けとスクリプト処理系の接続にも不便があり、結果としてこの例では `yarn` は `yarn.cmd` を叩く必要 がある。

※`PS> gcm yarn`が`yarn.cmd`となるのは導入方法がWindowsネイティブのインストーラーを用いた場合。ちなみに`npm`経由で導入する場合は`PS> yarn`は`yarn.ps1`を返すが `cargo-make` の `command` が `NotFound` する現象は同様に発生する。

## 回避策

```Makefile.toml
[tasks.workaround]
args = [ "build" ]
command = "yarn"

[tasks.workaround.windows]
args = [ "build" ]
command = "yarn.cmd"
```

または

```Makefile.toml
[tasks.workaround]
args = [ "build" ]
command = "yarn"

[tasks.workaround.windows]
args = [ "-C", "yarn build" ]
command = "powershell"
```

# 参考

- [sagiegurari/cargo-make NotFound Error with .cmd executable file in Windows #617](https://github.com/sagiegurari/cargo-make/issues/617)

> anyhow, to incorporate that into cargo-make would mean, before each invocation to search the path for all combinations first and that is a perf hit that i would like to avoid.

`cargo-make` の Author の sagiegurari の考えでは今回の例のような現象に対して `cargo-make` 本体で対応を行いユーザーが `tasks.workaround.windows` のような回避策を実装する手間を省こうとすると `.cmd` 等々の実行可能な拡張子を含めたパス検索に伴う性能低下が懸念されるため、この場合は便利よりも性能要求へ `cargo-make` としての判断の舵を切りたい、とのことのようでした。
Atomic Designを理解する②

###はじめに

[前回の投稿][1]でAtomic Designについてまとめました。
[1]:https://qiita.com/haykubo/items/5e0c26c0f03ed52e6cdb
今回は実際に Atomic Design を用いた開発を実践した感想をまとめていきたいと思います。

行ったこと : Atomic Design をデザイン手法として用いた画面開発
使用言語 : Vue.js
対象者 : エンジニア初心者・Atomic Designを実践しようと考えているエンジニア／デザイナー

###実際に開発して感じたこと（メリット編）

前回まとめた、Atomic Design のメリットデメリットをもとに、画面開発を通して感じたことを振り返っていきます。

★<font color ="blue">前回挙げたメリット</font>

| No. | メリット |
|:-:|-|
|  ① | スタイルを書く回数が減り、<b>デザインの効率が格段に上がる</b>  |
|  ② |  コンポーネントを再利用できるため、<b>ページデザインに統一感が生まれる</b> |
|  ③ |  <b>各コンポーネントの役割を理解しやすい</b> |
|  ④ |  <b>データの流れを追いやすくなる</b> |

####①デザインの効率が格段に上がる
Atomic Design では画面要素を細かくコンポーネント化しています。ですので、一度作成したコンポーネントを配置するだけで、画面に表示することができました。特に効率が格段に上がった場面として、画面開発中にUIが追加された際に、すでに作成済みのコンポーネントを再利用することで、新たなパーツをすぐに作成※することができたという場面がありました。

※すでに作成済のボタンコンポーネントとテキストコンポーネントを組み合わせて、ボタンテキストコンポーネントをデザインできたこと

####②ページデザインに統一感が生まれる
今回複数人で複数の画面開発を行いました。全員が同じ画面を実装したわけではないため、画面によって必要なコンポーネントは異なります。しかし、画面の実装方法が定まっていたため、誰が実装しても画面の統一感を保つことができました。実際に、手順に沿って開発するだけで初心者の自分でも綺麗な画面を実装することができました（修正ポイントはたくさんありましたが、一つ画面を実装できたことは自信になりました）。


####③各コンポーネントの役割を理解しやすい
こちらはコンポーネント設計のルールを決めておくことが、こちらのメリットにつながると思いました。Atomic Designでは、Pages、template、Organisms、molecules、atomsと画面の構成要素を分割しています。プロジェクトでは、その構成要素をさらに細かく設計していくことで、このコンポーネントは何をするかが明確になると思います。実際に、今回Pagesでは何を実装する、organismsでは何を実装するを明確に設計していたため、この画面を作るときはどのコンポーネントを使えばよいかなどで迷うことはありませんでした。また命名規則などさらにこだわるポイントがあることも実際に体験して気づきました。


####④データの流れを追いやすくなる
Atomic Designを用いることで、各コンポーネントの親子関係が理解できていたので、その結果データの流れは追いやすくなりました。また[devTools][2]を使い、デバックがしやすくなることで、データの流れを追うことが容易になることにつながったと思います。
[2]:https://qiita.com/haykubo/items/fce1674365b2b622c70c

###実際に開発して感じたこと（デメリット編）

★<font color ="red">前回挙げたデメリット</font>

| No. | デメリット |
|:-:|-|
|  ① | プロジェクトの規模によってはコンポーネントの数が増え過ぎて、<b>管理が大変になる</b>  |
|  ② |  ルールを決めて管理・認識を統一しないと、<b>コンポーネントを分割する粒度がバラバラになる</b> |

####①管理が大変になる
日々開発する中で新規コンポーネントが追加されることが多くあったため、最初に決めごとをチームで合意形成することが大切だと感じました。特に以下のポイントが大事になると思います。
・ 状態管理の方法（vuex）を決める
・ 状態管理の粒度を決める、共通認識を取る
・ 共通で利用する定数やファイルの配置などの運用方法を決める
####②コンポーネントを分割する粒度がバラバラになる
こちらも上記の管理するためのポイントと同じです。

状態管理の粒度やファイルの運用方法の合意形成を最初にチームで取っておくことが大事だと感じました。それは、チームメンバーが増えた時にキャッチアップしやすくなったり、どの機能にどのコンポーネントを使うかの認識を合わせやすくなることにつながると思います。実際に、今回画面開発を進めていく中で、毎日新規で追加されたコンポーネントの使い方や、状態管理の方法を<b>チームで共有する時間</b>を取っていましたし、<b>開発手法をまとめて日々アップデート</b>することも意識しました。

###Atomic Designをうまく導入・運用していくために
まとめとして、Atomic Designをうまく導入・運用するポイントをまとめます。
・状態管理の方法・粒度を決めて合意形成を取る
・コンポーネント設計のルールを決める（命名規則など）
・各決め事を見える化し、アップデートする / メンバーとのコミュニケーションを怠らない

以上が今回実際にAtomic Designを実践してみて、今後うまく導入・運用していくためのポイントです。Atomic Designに限った話ではありませんが、<b>決め事を作ること</b>、<b>決め事の見える化・コミュニケーションを怠らないこと</b>がよりよい開発につながるということを身をもって感じました。
Adobe Xdを上手く使おうとして辛いなぁと思った話

この記事は、<a href="https://qiita.com/advent-calendar/2021/wano-group" target="_blank">Wano Group Advent Calendar 2021</a>の記事です。
# 背景
現在、私は社内で仕様策定の仕事をメインで行っています。
今まではざっくりしたデザインやUIチェック用のプロトタイプを作成するのにAdobe Xdをもの凄く雑に使っていたのですが、
エンジニアへの指示書やコミュニケーション用に割ときっちりと使わないといけないなという事で、ここ2か月程Xdを使い倒していたというのがこの記事を書こうと思ったきっかけです。

# 結論から言うと
Xdはどう使っても**プロトタイピングとデザイナー・コーダーとのコミュニケーションツールとしての機能に寄りすぎていて辛い**というのが正直な感想です。
全体的に**1から作成する画面等には強いのですが修正、追加等のメンテナンスに弱い**という感じでした。

# 具体的に辛い所
## 共有リンクがアートボード単位かつフローでしか作成できない
大きなアートボードの一部分だけを修正したい場合等、指示書として共有リンクを作成すると修正箇所が分かりづらいんですよね。細かい修正の為だけにアートボード作るのかというジレンマに陥ります。
**オブジェクトかコンポーネントの単位で共有リンクを作成できないものか…**

また、チケット単位でリンクを作成したくてもフローが繋がっている箇所全てが共有リンクとして吐きだされてしまうのも辛いです。逆にフローが繋がっていないアートボードをまたいで１つのリンクで指示書を作成出来ないという問題も。

そもそも全体のフローを含んだプロトタイプと指示書を一緒にすべきではないのかもしれません。


## コメントのピン留めがオブジェクト単位に紐づかない
Zeplin等のツールもピン止めできるコメント機能をウリにしていますが、これがアートボードに対する絶対位置になっていて、オブジェクトに紐づいていないので変更を修正するとコメントがズレてしまう…！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152319/fb2f9a82-439e-c66f-69f6-6834b0f27fb6.png)
**こういうコメントをして修正されてリンクを更新後見てみると**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152319/6a25f228-362c-1347-b6c8-4cd8266e63c5.png)
**ピン止めが迷子になっているように見えます**
**なんなら間に要素を挿入等しようものならそこから下部のコメント位置全てズレるなんて悲劇も**

デザインスペックはオブジェクト単位で持っているのだからコメントもオブジェクトに紐づけられないかなぁと思ってしまう次第です。
コメントは1度限りの使い捨て指示のような形で使うのであれば問題は起こらないのでしょうが、実際はコメントでの改善をそのまま反映するというパターンも多々ありそうです。

## デザインスペックが本当に「デザインからのコーディング」に特化
<a href="https://helpx.adobe.com/jp/xd/help/work-with-design-specs.html#:~:text=%E3%83%87%E3%82%B6%E3%82%A4%E3%83%8A%E3%83%BC%E3%81%AF%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%9A%E3%83%83%E3%82%AF%E3%82%92,%E8%80%85%E3%81%AB%E6%8F%90%E4%BE%9B%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82" target="_blank">デザインスペック</a>は非常に素晴らしい機能でコーダー向けのスペックは充実していますがインタラクション（ステートである程度可能とはいえ）や仕様を残す機能が無い 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152319/736b4f39-8667-d9d8-cce0-e123a66c987c.png)
↑ここにメモ機能でいいのでデザインスペック以外の仕様記載が可能なようになってくれれば…！贅沢を言えば仕様記載オブジェクトには印を…

結局Xd上に付箋のように仕様を書く等で対応しています
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152319/b9611ea6-8081-2534-2d3f-1e4527de9f37.png)

## 総括
Wanoグループ内ではfigma等他ツールも使っていますが、デザイナーまでの指示としては使えても、バックエンド連携等の仕様を記載するとなるとどこも同じような課題を抱えているようです。（付箋まみれになる、バージョン管理が辛い、等）

とはいえXdはプロトタイプ、UI/UXデザインツールとしては使えるツールであることには変わりはない（特に動作面のフィーリングは個人的に最高です）ので今後に期待しています。

ただ単純に私の勉強不足もあるかもしれないので、もし具体的に解決案等があれば是非勉強させて頂きたいです…
GitHub ActionsとRe:VIEWを使って同人誌を書いてみた

# はじめに

この記事は[GitHub Actions Advent Calendar 2021](https://qiita.com/advent-calendar/2021/github-actions)の12月19日分の記事になります。

今回はGitHub Actionsを活用して同人誌の簡易校正とビルドを行ってみたことを書く予定です。

私は[恢徳堂](https://webcatalog.circle.ms/Perma/Circle/10092343/)という評論サークルもやっていますが、[作っている同人誌](https://github.com/huidetang/XiandaiFenshuVol5)はここ最近 GitHub Actions を使ってビルドしております。
私の事例が参考になれば幸いです。

## 自作のテンプレートの紹介

### 縦書き

https://github.com/huidetang/XiandaiFenshuTemplate

### 横書き

https://github.com/huidetang/yokogaki-template

これが、コードでできることの設定をあらかた含んだリポジトリになります。

だいたい以下のような機能を備えています。

- [Re:VIEW](https://reviewml.org/ja/)による書籍作成
- [upLaTeX](https://texwiki.texjp.org/?upTeX%2CupLaTeX)による版下作成　+ 縦書き設定
    - 版組は[jlreq](https://www.tug.org/texlive//Contents/live/texmf-dist/doc/latex/jlreq/jlreq-ja.html)を使用
    - 表紙に枠線を追加
- GitHub Actionsによる自動ビルド
    - [textlint](https://github.com/textlint/textlint)による簡易校正
        - プリセットは[SmartHR作成のプリセット](https://github.com/kufu/textlint-rule-preset-smarthr)をそのまま使用
        - 校正が正常に終わらないとビルドしないようになっている

ここで別途用意しなければいけないのは GitHub Discussions と GitHub Projects のかんばんボード、そして Wiki ですが、これを用意すれば確実に GitHub とお好みのエディタ（だいたいVisual Studio Code）を用意すれば本が作れてしまう環境になっています。

## なぜ GitHub Actions を使おうと思い立ったのか？

最初に同人誌を書いたときは Sphinx を使っていました。もちろん、その時にビルドはコマンドラインを叩いての手動でした。
その次から Re:VIEW に切り替え、しばらくは手動でビルドを行っていましたがあるとき Wercker というプライベートリポジトリでも無料で使える CI サービスがあると聞き、それを使うようになりました。
しかし、ここ最近（9月ごろ）から挙動がおかしく[^1]なり、 GitHub Actions なら安定してビルドができそうということで移行しました。 GitHub Actions を無料で制限を超えて使うにはパブリックリポジトリにする必要があり、初めて CC-BY-4.0 ライセンスのもとでオープンソースとして執筆を行う[^2]ことにしました。

[^1]: エラーメッセージを見ると IPv4 アドレスが足りないようでした。プライベートリポジトリで無料で使えるから混んでいたのでしょう。なお、12月に入ってビルドしたときには正常にビルドができました。
[^2]: そして印刷物の方を CC-BY-4.0 にしそびれるという失敗に気がつきました。

## 最後に

今回の顛末は、来たるコミックマーケット99に出展する[小江戸らぐ](https://webcatalog.circle.ms/Circle/15710629)の新刊、『LinuxUser 2021冬号』でも書いています。ここには書ききれなかったことも載っているので、是非ともお手にとってご覧ください。

皆さんも、是非楽しい同人誌執筆ライフを過ごしてみませんか？