OmniAICreator/Qiita-1.07M huggingface dataset:
IQ Bot：カスタムドメインをPostする方法【V11】

[こちらの記事](https://qiita.com/IQ_Bocchi/items/913163e8aa3a853e8990)でIQ Botのカスタムドメインの作成方法を紹介していますが、POSTの仕方はA2019/V11で異なります。

ここでは、V11にカスタムドメインをPOSTする方法を紹介します。
（A2019については[こちら](https://qiita.com/IQ_Bocchi/items/84ab4d5c73332fca7f65)を参照）

##１．POSTMANの起動

IQ Botサーバの中にPOSTMANをインストールしします。
POSTMANをインストール～起動する手順は[こちら](https://qiita.com/IQ_Bocchi/items/c5846f0520dc3b2b296a)です。

APIさえPOSTできればPOSTMANじゃなくてもいいのですが、筆者はいつもPOSTMANを使っているので、以降の説明もPOSTMANを使う前提で説明していきます。

##２．JSONファイルのPOST

POSTMANを起動し、以下の要領でJSONファイルをPOSTします。

![109_Postmanの使い方_default.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/b4e56e5e-0860-b137-60cf-357baddf4ff6.jpeg)

上記②のIQ Botのサーバ名は、IQ Botのログイン画面を起動したときにアドレスバーに表示される以下のURLの、`http://xxxxxx`の部分です。

`http://xxxxxx/?redirect=/IQBot/#/login?next=/index`

`コピペ用サンプル　：　http://xxxxxx:9997/domains/import`

##結果を確認

成功すると、POSTMANにこんな結果が返ってきます。
![110_結果.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/793a71ee-4665-a579-16f7-f4794783d7ac.jpeg)

IQ Botの学習インスタンスの作成画面を開くと、以下のようにドキュメントタイプ（＝ドメイン）の選択肢が増えていて……
![111_確認１.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/6b59ffdf-32b1-4bbd-8125-6cd074841be1.jpeg)

そのドメインを選択すると、以下のように定義した項目が表示されるはずなので、それを確認！
![111_確認2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/d83585f1-59eb-7617-ca48-3f204255a073.jpeg)

##エラーが出るときは……

エラーが出るときは、以下を確認してください。

- POSTしたJSONファイルの文法が間違っていないか

以下のサイトで、文法チェックができます。
https://lab.syncer.jp/Tool/JSON-Viewer/

- JSONファイル上で定義した名称の重複がないか

[このページ](https://qiita.com/IQBotter/items/a2dad8645a746fb96f9d)の一番下に書いていますが、`fields`の`name`と`aliases`の`names`は、ひとつのドメインの中で重複した値を保持することができません。

判断に迷うケースもあるかもしれませんが、どれかに寄せるしかありません。

- POST先のURLが間違っていないか

[こちら](https://qiita.com/IQBotter/items/913163e8aa3a853e8990#postman%E3%81%8B%E3%82%89json%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92post%E3%81%99%E3%82%8B)を今一度確認して、POST先のURLが間違っていないか確認します。
RxCocoa でクラスの特定のメソッドをフックする

以前書いた ReactorKit の概要編のサンプル実装をしている際に、「`ViewWillAppear` で処理を行いたんだけど、`rx` で呼び出せないかな〜」と思っていたら、RxCocoa にはクラスの特定の関数をフックするプロパティが用意されていたのを最近知ったのでちょこっと使ってみようと思います。



### 提供されている関数

用意されている関数は下記の２つがあり、`sentMessage` がメソッドが呼ばれた時に通知され、`methodInvoked` がメソッドの処理が完了した直後に通知されます。

```swift
rx.sentMessage(Selector)
rx.methodInvoked(Selector)
```

### 使ってみる

`sentMessage` と `methodInvoked` を使ったサンプルコードが下記になります。

```swift
rx.sentMessage(#selector(viewWillAppear(_:)))
    .subscribe(onNext: { _ in
        print("viewWillAppearが呼ばれた直後です")
    })
    .disposed(by: disposeBag)

rx.methodInvoked(#selector(viewWillAppear(_:)))
    .subscribe(onNext: { _ in
        print("viewWillAppearの処理が終わった直後")
    })
    .disposed(by: disposeBag)
```

また、当然ですが下記のように自分で定義した関数もフックすることができ `@IBAction` のメソッドなんかも問題なくフックできます。

```swift
rx.sentMessage(#selector(hoge))
    .subscribe(onNext: { _ in
        print("hogeが呼ばれた直後です")
    })
    .disposed(by: disposeBag)
```

余談ですが、ReactorKit の `StoryboardView` を使った際に呼ばれる `bind(reactor:)` メソッドの際に `sentMessage` や `methodInvoked` でフックしようとしても通知されないので注意が必要です。理由は、`StoryBoardView` プロトコルで定義されている `bind(reactor:)` メソッドは `ViewDidLoad` の後に呼ばれるためです。このように、View の初期化時に処理したい場合は下記のように記述します。

```swift
  func bind(reactor: MyReactor) {
     Observable.just(Void())
  }
```

### 参考

- https://qiita.com/sgr-ksmt/items/e259e00f5c0a2f3109ff
- https://qiita.com/rinov/items/69abcdbaa321102f6d90
- https://github.com/devxoul/RxViewController/issues/7
Line Messaging APIでユーザー情報を取得する方法

これでいけます。

```bash:get_user_info.sh
#!/bin/bash

# access_token 取得
access_token=アクセストークン

curl -X GET https://api.line.me/v2/bot/profile/ユーザーID \
-H "Authorization: Bearer ${access_token}"
```

↓↓↓感じのjsonがresponseされます。

```response.json
{"userId":"???????","displayName":"Shinji Kumagai","pictureUrl":"profile画像のurl","language":"ja"}
```
AtCoderでのC++用テンプレート

以下が自分が普段使ってるC++用の必要最低限のテンプレートになります。
その他の関数 chmin()やchmax()等は別でスニペットにしてライブラリとして持っています。(短いほうが綺麗で精神衛生上良いので。)

```cpp
#include<bits/stdc++.h>
using ll= long long;
#define REP(i,n) for(ll i=0;i<ll(n);i++)
#define FOR(i,a,b) for(ll i=a;i<=ll(b);i++)
#define ALL(x) x.begin(),x.end()

#define INF (int)1e9 //10^9:∞
#define LLINF (long long)1e12
#define MOD (int)1e9+7 //10^9+7:合同式の法
#define PI 3.141592653589
#define PB push_back
#define F first
#define S second
#define __MAGIC__ ios::sync_with_stdio(false);cin.tie(nullptr);

#define YESNO(T) if(T){cout<<"YES"<<endl;}else{cout<<"NO"<<endl;}
#define yesno(T) if(T){cout<<"yes"<<endl;}else{cout<<"no"<<endl;}
#define YesNo(T) if(T){cout<<"Yes"<<endl;}else{cout<<"No"<<endl;}

#define Graph vector<vector<int>>
#define PII pair<int,int>
#define VI vector<int>
#define VVI vector<vector<int>>
#define VPII vector<pair<int,int>>

#define DDD fixed<<setprecision(10)

using namespace std;
/*..................DEFINE GLOBAL VARIABLES...................*/


/*.....................DEFINE FUNCTIONS ......................*/



/*.........................kemkemG0...........................*/
signed main() {
	__MAGIC__

		return 0;
}

```
見てほしいポイントは、

```cpp
#define __MAGIC__ ios::sync_with_stdio(false);cin.tie(nullptr);
```
ですね笑

入出力高速化のおまじないですがなんとなくマクロにしてます笑
IQ Bot：カスタムドメインをPostする方法【Automation360】

[こちらの記事](https://qiita.com/IQ_Bocchi/items/913163e8aa3a853e8990)でIQ Botのカスタムドメインの作成方法を紹介していますが、POSTの仕方はAutomation360/V11で異なります。

ここでは、Automation360にカスタムドメインをPOSTする方法を紹介します。
(V11については[こちら](https://qiita.com/IQ_Bocchi/items/d05db8602fa2e822bb6a)を参照)

POSTするドメイン自体の作成方法は、[こちら](https://qiita.com/IQ_Bocchi/items/a2dad8645a746fb96f9d)を参照してください。

#Automation360にカスタムドメインをPOSTする手順

##１．POSTMANの起動

POSTMANをインストール～起動する手順は[こちら](https://qiita.com/IQ_Bocchi/items/c5846f0520dc3b2b296a)です。

APIさえPOSTできればPOSTMANじゃなくてもいいのですが、筆者はいつもPOSTMANを使っているので、以降の説明もPOSTMANを使う前提で説明していきます。

##２．認証トークンの取得

A2019の場合、IQ BotにAPIを投げる前には必ず認証トークンの取得が必要になります。
認証トークンの取得のやりかたは[こちら](https://qiita.com/IQ_Bocchi/items/80de2631668a648830ba)の記事を参照してください。

##３．カスタムドメインのPOST

再び新規のリクエスト作成画面を起動（やりかたは[こちら](https://qiita.com/IQ_Bocchi/items/c5846f0520dc3b2b296a#%EF%BC%92%E3%83%AA%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%88%E4%BD%9C%E6%88%90%E7%94%BB%E9%9D%A2%E3%81%AE%E8%B5%B7%E5%8B%95)）して、以下のとおり編集します。

###３－１．エンドポイントとヘッダー

![15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/3e1af5d7-de88-d5d8-14d3-8a864542885c.png)

| No. |項目|設定内容|
|:-----------|:------------|:------------|
|①|メソッド|「POST」を選択します。|
|②|エンドポイント|`{{serverURL}}/IQBot/gateway/domains/import`と記載します。<br>※{{serverURL}}の意味については、[こちらの記事](https://qiita.com/IQ_Bocchi/items/c52b48dcccf647b9d14b)を参照してください。|
|③|入力タブ|「Header」を選択|
|④|Key/Valueの追加|KEYに`x-authorization`、VALUEに`{{token}}`と入力します。|

###３－２．Body

Bodyタブ（⑤）を選択し、その中身（⑥）に[こちら](https://qiita.com/IQ_Bocchi/items/a2dad8645a746fb96f9d)の構造に従って作成したJSONファイルの中身を貼り付けます。
![16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/511ad4f1-4a16-02ac-0c5e-fe4b6fc15626.png)

さらに、Postmanを使っている場合は、下図の⑦「raw」を選択し、下図⑧は「JSON」を選択してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/b33f8a3c-5782-c1e1-754c-63a5afcf24b0.png)

（すると、ヘッダーのcontent-typeにapplication/jsonが入ります。他ツールを使っている方は、ヘッダーのcontent-typeを直接指定してください）

###３－３．Send！

ここまでできたら、画面右側の「Send」ボタンをクリックします。

以下のような結果が返ってきたら成功です！

![17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/20ab2d95-034e-1555-8679-6a000109c298.png)

##エラーが出たら

エラーが出るときは、以下を確認してください。

- POSTしたJSONファイルの文法が間違っていないか

以下のサイトで、文法チェックができます。
https://lab.syncer.jp/Tool/JSON-Viewer/

- JSONファイル上で定義した名称の重複がないか

[このページ](https://qiita.com/IQBotter/items/a2dad8645a746fb96f9d)の一番下に書いていますが、`fields`の`name`と`aliases`の`names`は、ひとつのドメインの中で重複した値を保持することができません。

判断に迷うケースもあるかもしれませんが、どれかに寄せるしかありません。

- POST先のURLが間違っていないか

サーバーURLを変数に格納している場合、変数に格納したURLの最後と、エンドポイントの変数の直後にスラッシュ(/)が重複していたり、どちらにもスラッシュが入っていないなどの間違いをやりがちです。
【Unity】Rigidbody簡易説明書

#はじめに
本記事はよく使用するものをピックアップした、**初心者向け**のRigidbodyの簡易説明書になります。
個人的なメモの意味合いが強いので、もっと詳しく知りたいという方は[公式リファレンスへどうぞ。](https://docs.unity3d.com/ScriptReference/Rigidbody.html)
下記に記載のないものは今後、別で記事を書く予定。
#Rigidbodyとは
[公式マニュアル](https://docs.unity3d.com/ja/2019.4/Manual/class-Rigidbody.html)では以下のように記載。
>Rigidbody を使うと、ゲームオブジェクト を物理特性によって制御する事ができるようになります。リジッドボディに力やトルクを加えると、オブジェクトをリアリスティックに動かすことができます。重力の影響を加えたり、スクリプトを使って力を与えたり、NVIDIA PhysX 物理エンジンを通して他のオブジェクトと相互作用させるためには、ゲームオブジェクトにリジッドボディを加える必要があります。

#Properties
###mass
物体の**質量**。オブジェクトのイメージに沿って設定する(鉄球だったら20,羽だったら0.01のように)。重いものが速く落ちると思ってるなら、大きな間違いなので気をつけよう。
###drag
物体の**抵抗**。数値をあげれば抵抗があがり、物体は遅くなる。こいつを調整することで、水の中などを表現することができる。
###angularDrag
物体の**回転抵抗**。回転抵抗などがわからない場合はdragの回転バージョンくらいで覚えておこう。歯車など回転を遅くしたい場合に有効。
###useGravity
**重力の有無**を設定できる。宇宙空間などを表現したい場合はfalseにする。
###isKinematic
**物理的挙動をするかどうか。**trueにすると物理挙動をしなくなる。それならrigidbodyそのものを使用しなければいいと思われがちだが、急に動かなくなる人形のようなオブジェクトを作成したい時に便利。
###interpolation
動作の**補間**機能。Update()が呼ばれるタイミングと、物理演算を行うFixedUpdate()が呼ばれるタイミングは必ずしも一致しないため動きがカクついてしまう。Interpolateは直前フレームの速度を使って計算。Extrapolateは現在の速度から次フレームの位置を予測して補間を行う。計算処理が重いので、カメラで追従するメインキャラクターのみ設定するのが吉。
###constraints
任意の軸での移動、及び回転を制御することができる。3D空間だけど2D的な挙動を期待する時に使用できる。

#Public Methods
有用なメソッドばかりだが、簡易リファレンスなので基本的なものを記す。
###AddForce(Vector3 force, ForceMode mode)
力を加えるメソッド。forceで力のベクトルを指定する。
以下でForceModeについて解説。

**ForceModeの種類**
4つのモードがあります。

● **Force**
物理法則に近い挙動。
**```a = F/m(加速度 = 力/質量)```**
で計算する。
徐々に力を加えて加速していく物体に使用すると良い。ForceModeを指定しない場合のデフォルト。

● **Acceleration**
上記Forceの質量無視バージョン。
**```a = F(加速度 = 力)```**
になるので、どんな重さでも徐々に加速して欲しい時に使用。

● **Impulse**
加速を無視した瞬発的な力。
**```v = F/m(速度　= 力/質量)```**
で計算。一発のみ力が発生する時に使用。個人的にはゲームと一番相性が良いと思っている。

● **VelocityChange**
上記Impulseの質量無視バージョン。
**```v = F(速度　= 力)```**
になるので、質量関係なく吹き飛ばしたい時などに使用。

###AddTorqueVector3 torque, ForceMode mode)
物体に**トルク**を加える。トルクがわからない方は[こちらへどうぞ。](https://www.adrec-jp.com/products/about_torq.html)
物理的に回転して欲しい時に使用。

###MovePosition(Vector3 position)
物体の位置を座標的に動かす。rigidbody使用オブジェクトで物理挙動関係なく移動させたい場合は、transform.positionよりMovePositionの方が軽い。

###MoveRotation(Quaternion rot)
物体の回転を行う。MovePositionの回転版。


#まとめ
メモと最初に言ったが、流石に忘れないレベルの内容になってしまった。
公式リファレンスはゴチャゴチャしてて見にくいよーという初心者の方が、導入として見てくれたら幸いです。
Katalon Studio でTest Objectを動的に指定する

#概要
本記事はxpathやcssセレクタを把握してテスト自動化に取り組んでいる方向けの内容です。
Katalon StudioのTest Objectについて、パスの一部や全てをテストケース内で指定したいときがあると思います。
以下にそれぞれを紹介します。

##ObjectリポジトリにTest Objectを作成し、テスト実行時にパスの一部を動的に指定する
オブジェクトのSelected Locatorにて ${変数名} を記載することで、変数に値を入れてパスの指定ができるようになります

#### Test Object側の設定

例 ) xpathセレクタでaタグのテキストを動的に指定する場合
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/699916/82dd32df-30a9-eb92-3c84-d5fdda468fce.png)


```
//a[text()='${text}']
```


#### Test Case側での指定
findTestObjectする際、以下のように変数に値を指定できます（複数設定可能）

```
findTestObject('Object Repository/オブジェクトのパス', [('変数名') : '値',('変数名') : '値',('変数名') : '値'])
```

例 ) xpathセレクタでaタグのテキストを動的に指定する場合
▼イメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/699916/520b66dd-c816-95f5-de65-4a9ba45473f0.png)

▼スクリプト

```
'ブラウザを開く'
WebUI.openBrowser("")

'ダミーサイトに遷移'
WebUI.navigateToUrl('https://katalon-demo-cura.herokuapp.com/')

'Test Objectの変数textに文字列をセットしたパスでリンクを探してクリック'
WebUI.click(findTestObject('New Test Object', [('text') : 'Make Appointment']))

'遷移先のURLを確認のためにスクリーンショット取得'
WebUI.takeScreenshot('test.png')

'ブラウザを閉じる'
WebUI.closeBrowser()
```

##実行時にメモリ内にテストオブジェクトを作成(CustomKeywords使用)
公式ページの紹介で[こちら](https://docs.katalon.com/katalon-studio/docs/manage-web-test-object.html#creation-of-test-object-in-memory-at-runtime　"Web Test Object | Katalon Docs")に記載があったのを参考に、カスタムキーワードを使用して、ケース内で動的にXpathでのオブジェクト取得ができるようにします。

####Custom Keywords （カスタムキーワード）とは
WebUI.click()などの既存のKeywordのように、よく使う処理をカスタムキーワードとして定義して、テストケースの実装時に使用できます。
▼公式概要ページ
https://docs.katalon.com/katalon-studio/docs/introduction-to-custom-keywords.html

####Xpath指定のオブジェクトを作成する Custom Keyword を定義
Keywords > 任意のパッケージ を右クリックしてnew > keyword を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/699916/0d2a9551-c8e6-92a1-82a3-85158d9547bc.png)

任意のクラス名を設定し「OK」を押下
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/699916/7cd69164-2674-8544-0b8f-b4586eb7fc97.png)
※「Generate sample keywords for Web」は必須ではないですがあるとわかりやすいのでチェックをいれてます。

作成されたファイル内に以下の関数名「xpathObject」として追加

```
	@Keyword
	static TestObject xpathObject(String xpath) {
        TestObject to = new TestObject()
	    to.addProperty("xpath", ConditionType.EQUALS, xpath)
		return to
	}
```



####テストケース内で Custom Keyword を呼び出す

テストケース内では

```
CustomKeywords.'クラス名.関数名'
```

のように全てのカスタムキーワードへアクセスが可能です。

以下にクリックの例を記載

```
'任意のXpathを指定'
String xpath ="//a[text()='Qiita']"

'カスタムキーワードでオブジェクト呼び出してクリック'
WebUI.click(CustomKeywords.'myKeyword.xpathObject'(xpath))
```


以上が動的なオブジェクトの指定方法の紹介になります。
私も勉強中なので、他にも良い方法・おすすめの情報があれば良ければ教えてもらえると嬉しいです。
ありがとうございました。
少数サンプルのバイアスで回帰係数は変わるのか？


ネット調査とリアルで１０差があるという仮定で線形回帰してみた。

```r

bias=c()

for(i in 1:500){
  Nreal=i
  Nnet=1000-i
  d1=rnorm(Nreal,mean=190)
  d2=rnorm(Nnet,mean=200)
  
  
  df=data_frame(h=c(d1,d2),bias=c(rep(0,Nreal),rep(1,Nnet)))
  
  
  res=lm(h~.,df) %>% summary()
  bias=c(bias,as.data.frame(res$coefficients)[2,1])
}

ts.plot(bias)
summary(lm(bias~seq(1,length(bias))))
```

![plot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/38159/8fbdab90-da95-d46d-e845-81a706d7214b.png)

Coefficients:
                      Estimate Std. Error t value Pr(>|t|)    
(Intercept)          9.986e+00  1.015e-02 983.782   <2e-16 ***
seq(1, length(bias)) 4.130e-05  3.511e-05   1.176     0.24    
---

という事で、それほど問題はないと思う。n=30まででも同様。
ただ、このケースだとn=30くらいまではバリアンスが大きいケースがちらほら出る。
React NativeでGoogleフォントを使用する方法

# React Nativeでカスタムフォントを使う方法

久しぶりに記事を書いていこうと思います！

Expo製のReact NativeでGoogleフォント等を利用する時の手順をまとめます。ざっとググってみたところあまり該当の記事が見当たらなかったのでもしかしたら誰かの役に立てるかと…！

※参考 [Expo: Using Custom Fonts より](https://docs.expo.io/guides/using-custom-fonts/)


```json:環境について
  "dependencies": {
    "@expo-google-fonts/roboto": "^0.1.0",
    "expo": "~38.0.8",
    "expo-font": "~8.2.1",
    "expo-status-bar": "^1.0.2",
    "react": "~16.11.0",
    "react-dom": "~16.11.0",
    "react-native": "https://github.com/expo/react-native/archive/sdk-38.0.2.tar.gz",
    "react-native-web": "~0.11.7"
  }
  "devDependencies": {
    "@babel/core": "^7.8.6",
    "babel-preset-expo": "~8.1.0"
  }
```


---

まずは [ExpoのGithub](https://github.com/expo/google-fonts#-available-fonts)を確認し、対応しているGoogleフォントを探す。


`expo-font`と`@expo-google-fonts/利用したいフォント`をインストールする。
（Here are a few examples of the 3020 variants of 991 fonts available:とサイトにもあるように、フォント数は９９１種類でしょうか。）


上記のGithub内にある[こちら](https://directory.now.sh/)のサイトでフォント名を直接入力して探してみるのも良いかもしれません。

  
希望のフォントが見つかったら下記の通りインストール。**今回はRobotoをインストール**するとします。


```terminal
$ expo install expo-font @expo-google-fonts/roboto
```

完了したらベースとなるコンポーネント(今回はApp.js)にてimportします。

```react:App.js
import React from 'react';
// 必要なGoogleフォントをinstallする
import {
  useFonts,
  Roboto_400Regular,
  Roboto_700Bold,
} from '@expo-google-fonts/roboto';

import { AppLoading } from 'expo';

import Home from './screens/Home';

export default function App() {
  // フォントを設定
  let [fontsLoaded] = useFonts({
    Roboto_400Regular,
    Roboto_700Bold,
  });

  if (!fontsLoaded) {
    return <AppLoading />;
  }

  return <Home />;
}

```


Appに対しての子コンポーネントであるHome.jsでもフォントを使用可能

```react:Home.js
import React from 'react';
import { StyleSheet, Text, View } from 'react-native';

const Home = () => {
  return (
    <View style={styles.container}>
      <Text style={styles.titleText}>helloo</Text>
    </View>
  );
};

export default Home;

const styles = StyleSheet.create({
  container: {
    padding: 24,
  },
  titleText: {
    // 下記のようにfontFamilyを指定する
    fontFamily: 'Roboto_400Regular',
    fontSize: 20,
  },
});

```

---

### 追記（2020/09/04）

上記のようにそれぞれのコンポーネントで逐一fontFamilyを指定するのは面倒です。。。そんな場合は、下記のようにグローバルなスタイルシートを作成してフォントを指定してください！


```javascript:globalStyles.js
// styles/globalStyles.js 

import { StyleSheet } from 'react-native';

export const globalStyles = StyleSheet.create({
  container: {
    flex: 1,
    padding: 20,
  },
  titleText: {
    fontFamily: 'Roboto_400Regular',
    fontSize: 18,
    color: '#212121',
  },
});

```

globalStylesをexportし、どのページからimportできるようにしましょう。そうすると新たにAboutコンポーネントを作成した際も下記のように指定可能です。

```react:About.js
import React from 'react';
import { Text, View } from 'react-native';
// globalStyles
import { globalStyles } from '../styles/global';

const About = () => {
  return (
    <View style={globalStyles.container}>
      <Text style={globalStyles.titleText}>About</Text>
    </View>
  );
};

export default About;
```





以上です！！

参考になりましたら嬉しいです😎
IQ Botの認証トークンを取得するAPI

IQ BotにAPIを投げるためには、まず最初に、このAPIを実行して認証トークンを取得する必要があります。

この記事では、認証トークンを取得するAPIの作成～POSTの方法を説明します。

なお、この記事で解説するのは、ログイン時にユーザー名とパスワードを使うタイプの認証を採用している場合の方法です。
SSO認証（SAML）を使用している場合は、やりかたが若干異なります（別途記事を書きます）。

##０．前提知識（作業だけやる場合は読み飛ばしてもOKです）

Automation Anywhere のサーバー機能である Control Roomにログインすると、そのたびに認証トークンが生成されます。
普通に画面からログインやログアウトしているときは、認証トークンの存在を意識することはありませんが、APIを投げるときは常にトークンが必要になります。

認証トークンは15分ごとにリセットされるので、このAPIは15分ごとに投げなおす必要があります。

また、同じControl Roomに同じユーザーが同時にログインすることはできないので、**画面からControl Roomにログインした状態でこのAPIを投げると、画面側がログアウトされます。**

同様に、**このAPIを投げたあとで画面からControl Room にログインすると、その時点でAPIから取得したトークンが無効になります。**なので、画面からログインした後で再びAPIを投げる場合は、15分経過していなくてもこのAPIを投げなおす必要があります。

##１．APIの作成

###１－１．API内容の編集（エンドポイント～Body）

APIの内容を以下のように編集します。
![06.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/4b16e2ca-4f48-7eb0-cc55-961b429f79e4.jpeg)

| No. |項目|設定内容|
|:-----------|:------------|:------------|
|①|メソッド|「POST」を選択します。|
|②|エンドポイント|`{{serverURL}}/v1/authentication`と記載します。<br>※{{serverURL}}の意味については、[こちらの記事](https://qiita.com/IQ_Bocchi/items/c52b48dcccf647b9d14b)を参照してください。|
|③|入力タブ|「Body」を選択|
|④|Bodyの中身|Control Room や IQ Bot へのログイン認証でSSOを使っているか、ユーザー名とパスワードを使用しているかで異なります。<br>それぞれのコピペ用のサンプルを以下に貼っておきます。<br>{{username}}や{{password}}の意味については、[こちらの記事](https://qiita.com/IQ_Bocchi/items/c52b48dcccf647b9d14b)を参照してください（②のリンクと同じ記事です）。|


#### SSOを使用している場合

```json:Body部分のコピペ用サンプル（SSOを使用している場合）
{
    "username": "{{username}}",
    "apiKey": "{{apikey}}"
}
```

- 上記のAPIキーは、Control Roomの設定画面にある「APIキーを生成」というボタンを押すと生成できます。
- APIキーに円マークまたはバックスラッシュが含まれている場合、円マークまたはバックスラッシュをふたつ重ねてエスケープする必要があります。

#### ユーザー名とパスワードを使用している場合

```json:Body部分のコピペ用サンプル（ユーザー名とパスワードを使用している場合）
{
    "username": "{{username}}",
    "password": "{{password}}"
}
```

###１－２．トークンを格納する変数を作成

[こちらの記事](https://qiita.com/IQ_Bocchi/items/7f2d85f90e7c0ab73590#environment%E3%82%92%E4%BD%9C%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%88%E3%81%86)を参考に、トークンを格納する変数を作ります。
変数の名前は何でもいいですが、ここから先の説明は`token`という名前の変数を作成した前提で進めます。

（１－１の手順を実施した際に、すでにEnvironmentの作成を上記ページのとおりに進めている人は、もう変数ができているはずです）

###１－３．トークンを変数に格納する処理を作成

次に、「Tests」タブ（①）を開いて、②にコピペ用サンプルの値をそのまま設定します。

![13.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/3396dcdc-be5e-2a1d-da8f-10437b263113.jpeg)

```javascript:Tests部分のコピペ用サンプル
var data = pm.response.json();
pm.environment.set("token",data.token);
```

上記は「取得したトークンを、tokenという名前の変数に入れてね」という命令です。

##２．APIのPOST

ここまでできたら、画面右側の「POST」ボタンをクリックします。

処理結果として、右側の欄に長～～いトークンが返ってきたら成功です！

![14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/aeb398ef-9d00-dfcc-019e-da20fc5c3c9b.png)

エラーが返ってきた場合は、エラーメッセージをもとに変数名や変数の内容に問題がないかを確認しましょう。
git-of-theseusを使ってコードの移り変わりを可視化してみた

書籍「[Engineers in VOYAGE ― 事業をエンジニアリングする技術者たち](https://www.lambdanote.com/collections/engineers-in-voyage)」のレガシーシステムの話題のなかで、**git-of-theseus** が紹介されており、面白そうだったので使ってみたメモです。

# git-of-theseusとは
https://github.com/erikbern/git-of-theseus

Gitのリポジトリを分析してくれるスクリプト（Python）で、下図のようにリポジトリ全体のコードを、追加された年ごとに分けてグラフとして出力してくれたりします。（※画像はリポジトリより引用）（他にも、コミットのAuthorの割合やファイルの拡張子の割合をグラフに含めたりできるようです。）

![git-git.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/995/7e4c433d-354b-d004-a99f-b132c86cd19d.png)

# 使ってみる

インストールは

```bash

pip install git-of-theseus
```
でOKです。（そもそも `pip` が入ってなかったので `easy_install pip` しました。）

インストールが完了すれば、あとは分析したいリポジトリに移動して

```bash
$ git-of-theseus-analyze ./
```

を実行します。

リポジトリのコミット数などによっては分析にだいぶ時間がかかる場合もありますが、完了すると `authors.json` `cohorts.json` `exts.json` `survival.json` というJSONファイルが生成されます。

あとは、生成されたJSONに対して

```bash
$ git-of-theseus-stack-plot cohorts.json
```

といった形で実行すると、グラフの画像ファイル（ `stack_plot.png` ）が生成される流れになっています。

# 使ってみた
実際に2年物の某リポジトリに対してgit-of-theseusを使ってみました。
![stack_plot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/995/3d5bd27f-8418-fd7f-5ffd-f5558508ae90.png)

このリポジトリでは、2020年の6月頃にリファクタリングを行ったのですが、それの結果がグラフとして現れており（2020-06の付近で減りが多め）、それが**視覚的にわかる**のが面白いなと思いました。

その他にも、「初期の頃にガッと実装したなぁ」「2019年6月にガッと増えてるけど、あの機能追加したんだなぁ」など、**思い出に浸れる**のも良いポイントでした。

# 終わりに
git-of-theseusの簡単な説明と使ってみた雑な感想を記載しました。
コードの移り変わりを可視化することで、視覚的にリポジトリの状態を把握できるので、振り返りに便利だなと感じました。

# 参考
- https://ja.wikipedia.org/wiki/テセウスの船
BeautifulSoupとSeleniumを組み合わせた自動テストの方法（Python）

#1．概要

WebページのHTMLに特定のデータを収集するためのタグを埋め込むことがあり、その埋め込んだタグが正しいのか、自動テストを用いてテストを行っていました。

[BeautifulSoupを用いたHTMLデータの検索方法](https://qiita.com/momotar47279337/items/bb123c98dc8c1c840409)

ただ、静的なページであればBeautifulsoupを用いてテストできたのですが、SSL化された画面などのセキュリティが強い画面は、HTMLデータを取得できませんでした。

そのため、BeautifulsoupでHTMLデータを取得できない場合は、Seleniumを用いて対象画面に遷移し、HTMLページを取得することにいたしました。



#2．プログラム

以下BeautifulsoupとSeleniumを用いてHTMLデータを取得するプログラムになります


```python:test.py
import time
from selenium import webdriver
from bs4 import BeautifulSoup
import re

#遷移できる画面を起点に、Beautifulsoupで取得できなかった画面まで遷移する
driver.get("test.html")
driver.find_element_by_css_selector("test").click()

#対象画面に遷移できた場合
source = driver.page_source
soup = BeautifulSoup(source,'html.parser')
elems = soup.find_all("script",text=re.compile("test"))

#次の画面に遷移する
driver.find_element_by_css_selector("test").click()
…
```

HTMLデータの解析はBeautifulSoupをそのまま使えばよく、

```python
source = driver.page_source
soup = BeautifulSoup(source,'html.parser')
```

HTMLデータの取得にSeleniumの**「.page_source」**を使えば問題ありません。

#3．まとめ

上記プログラムを必要な画面ごとに作成すれば完成です。また、上記プログラムの場合、起動するとChromeが立ち上がるので、Headlessで起動するのがいいかもしれません。
（Seleniumがちょくちょくエラーで止まるので、あまりHeadlessは使いませんが…）

参考：[SeleniumからHeadless Chromeを使ってみた](https://qiita.com/orangain/items/db4594113c04e8801aad)
しおのIT備忘録

はじめました。


　自己紹介
---
>
簡単にプロフィールを。
一部上場の自動車関連製造会社に勤める会社員
未経験ノンプログラマー
品質保証業務が本職ですが、
PC業務改善の一環で`ExcelVBA`と`GAS(Google Apps Script)`を勝手に始め、
現在はこの二つと`HTML/CSS`、`SQL`、`Python`を勉強中。
>

　Qiita投稿を始めた理由
---
>
・勉強の記録
・発信することでどこまで理解できているか整理・把握
・ポートフォリオ

とりあえずの今後の目標
---
>
・Qiita週一投稿
・`Python`の理解を深める
・ITリテラシーを高める
>

最後に
---

```
プログラミングはもちろんITに関する情報の勉強記録を投稿します。
併せて、ITツールを用いた仕事や働き方に関しての記事も投稿しようと思います。

数か月後には閲覧者に役立つ記事を投稿できるように!
```   
↑QiitaのMarkdown記法便利だな（笑）
ubuntuでcpplapackを使う

自分の備忘録用に

#CPPLAPACKについて
http://cpplapack.sourceforge.net/doc/main_page/Japanese.html
BLAS, LAPACK, およびPARDISOのC++クラスラッパー。
行列、ベクトル計算、特異値分解、連立方程式の求解等が非常にシンプルに記述できる。

#導入
基本的には
http://cpplapack.sourceforge.net/tutorial/japanese/index.html
に倣って進めていけば導入できる。

lapackおよびgfortranをインストールする。

```
sudo apt install libatlas3-base libatlas-base-dev
sudo apt install gfortran
```
cpplapackでは、コードのビルドにmakeおよびmakedependを利用するため、下記も併せてインストールする。

```
sudo apt install build-essential xutils-dev
```

cpplapackの本体については、Subversionを用いて~/local/にチェックアウトする。

```
cd ~
mkdir local
cd local
svn checkout https://svn.code.sf.net/p/cpplapack/code/trunk cpplapack
```

これで準備は完了である。

#動作確認
cpplapackの動作を確認する。
下記コードを作成する。

```cpp
#include "cpplapack.h"

int main(){
  CPPL::dgematrix A(2, 3);
  A(0, 0) = 1; A(0, 1) = 2; A(0, 2) = 3;
  A(1, 0) = 4; A(1, 1) = 5; A(1, 2) = 6;
  std::cout << A;
  return 0;
}
```
cpplapack本体に含まれるMakefileを用いることで簡単にビルドできる。

```
cp ~/local/cpplapack/makefiles/Makefile ./
make
./A.OUT
```

下記のように表示されればOK。

```
 1 2 3
 4 5 6
```
正規表現について

#正規表現とは？
文字列に特定の文字が含まれているかを確認することや、特定の文字を取り除くなどの操作を行うための技術のこと。

正規表現は様々な言語で同じようなコードで表すことができるように設計されている。


プログラミング中で正規表現を利用するケースは主に以下の３つ。

1.文字列の一部分を置換する

2.文字列が制約を満たしているか調べる

3.文字列の一部分を抽出する
props,$emit

#props
数字を使いたいファイル(渡される側)のところでprops:['number']のように定義する
渡す側のファイルで<LikeNumber number=6>のようにnumberの指定
※親コンポーネントに置いているデータを使いたいときは、
<LikeNumber number=6>の部分を<LikeNumber v-bind:number="number"></LikeNumber>
のようにしてv-bindでくっつける
v-bindはデータを動的に扱うためのもの


#$emit 子から親にデータを送る
```
  methods:{
        increment(){
            this.$emit("my-click",this.totalNumber+1);
        }
    }

<LikeNumber v-bind:totalNumber="number" v-on:my-click="number=$event"></LikeNumber>
```

#親のscriptにmethodsを書いて受け取る方法
```
export default {
  data(){
    return {
      number:14
    };
  },
  components:{
    LikeHeader
  },
  methods:{
    incrementNumber(value){
      this.number=value　　#valueで$emitの値を受け取ることができる
    }
  }
}
</script>


```
matplotlibにて折れ線グラフを作成しようとした所起こった現象についての考察

##起こった現象
###matplotlibで折れ線グラフ形式でプロットした所、0のラインにアンダーの線が発生した。
データの内容
①ある店舗の売り上げ個数
②2013年１月から1ヶ月ごと０、１、２、３・・・続き最終的に2015年10月を３とする
##プロットした結果
![date and sold.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654850/a2d0510a-7ec7-2c73-fad9-d0193b4891f5.png)

#考察
x軸は、②
Y軸は、①を示している。

折れ線グラフ作成をもとに考察すると、売り上げ個数としてカウントする際には考えられない、小数点第一位までグラフにプロットされていることがわかる。無論、売り上げ個数としてカウントする際に小数点第一位まで出てくることはありえない（一つの製品を半分にして販売されることはないため）

##自分なりの理想の形から考えてみる

![スクリーンショット 2020-09-03 22.36.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654850/0374d866-b90c-dbe6-b2a3-36f5135a95f6.png)

あ、、、れ。。
黄色の線を付け足している際に気づいたが普通の折れ線グラフの場合、一つの値に対して一つの情報が含まれているから正確に折れ線が作成されていることに気づく。
どういうことかというと、今回x軸の1-30までの値から考えると
x軸の<strong>１は</strong>
2013-1月1,2,3,4,5,6,・・・と続いている。つまりここでは１は最大３１日分の売り上げ情報が含まれていることがわかる。つまりできるだけグラフを読み取るためには、上記で示した黄色の線の１ヶ月の売り上げ個数の中央値をとる必要があるのではないか？？と考え黄色の線を付け足した。
↑の時点で正確に一般的にみる形でかつ正確な折れ線グラフを作成することは不可能。

##どうするか？？
折れ線グラフでプロットはできなそうなので棒グラフで表現しようとした。が。。。
macbook proが処理できない？！？！
ということで諦めて、date（１日ごとの日付）で表してみた。
![2013-1~2015-10 and sold.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654850/a12128dc-0541-da4e-8cfb-acabb314f98d.png)
このグラフに関しては、１日ごとのデータつまり（365×2）+（10×３０）と小さく見積もっても合計1030日と計算できる。そのためデータを表すことが難しく、プロットしても見えづらい。＞だから３３の番号で振り分けていたのかもしれない。横にかなり引っ張ることで詳しく見れるかもしれないがこれも私のmac book proの性能の問題か？横に伸ばし過ぎるとグラフが真っ白になる。

##ーーーーー考察結果ーーーーーーー
##一応調べた結果も。
；pythonのバージョンが違うことによるバグによって変な表示に？
；数値データとして扱われていない場合に変な表示に？
今回の問題にはあまり関係がなさそうに思えた。

##結論
:fist:　最初のグラフに関しては、折れ線グラフの基本となるデータの点が一つに決まらないため点が0と認識され、点同士を繋げた時に0のアンダー線が出現するのではないだろうか？
x軸の一つの数値に複数のデータが含まれている場合、折れ線グラフが正しく表示されない？のではないか？という結論に至りました。時系列データを使用する時には一つの数値に一つの情報が含まれているかを確認するべきで今回の場合では、折れ線グラフの形式でのプロットはナンセンスだったのではないだろうか。

##matplotlib初心者のため
##「いや、それ違うよ」という意見がありましたらコメントして頂けますと幸いです。
【Python】データサイエンス100本ノック（構造化データ加工編） 033 解説

- データサイエンス100本ノックをやりきる会を作りました🎉
- こちらの[Slack招待URL](https://join.slack.com/t/data-science-100nocks/shared_invite/zt-gfncg9vm-8W8b3UrDg8R~TKaqUkQpgw)からご参加ください！！
- ぜひ一緒に励まし合いながら、データサイエンス100本ノックをやり切りたいと思っています！

##Youtube
[動画解説](https://youtu.be/pCm70lEQgZ4)もしています。

##問題
P-033: レシート明細データフレーム（df_receipt）に対し、店舗コード（store_cd）ごとに売上金額（amount）の平均を計算し、330以上のものを抽出せよ。

##解答
```:コード
df_receipt.groupby('store_cd').amount.mean().reset_index().query('amount >= 330')
```

##出力
| 	| store_cd | amount |
|:-----------|:------------|:------------|
| 1 | S13001 | 330.19413 |
| 5 | S14011 | 348.470386 |
| 7 | S13003 | 350.915519 |
| 8 | S13004 | 330.943949 |
| 12 | S13015 | 351.11196 |
| 16 | S13019 | 330.208616 |
| 17 | S13020 | 337.879932 |
| 28 | S13052 | 402.86747 |
| 30 | S14010 | 348.791262 |
| 31 | S14011 | 335.718333 |
| 38 | S14026 | 332.340588 |
| 46 | S14045 | 330.082073 |
| 48 | S14047 | 330.077073 |

##解説
・Pandasを使用します。今まで使用したことのあるコードを用います。
・**'groupby'は、同じ値や文字列を持つデータをまとめて、それぞれの同じ値や文字列に対して、共通の操作（合計や平均など）を行いたい時に使います**。
・**'.amount.mean()'は、amountの平均値を表示させます**。
・**'.reset_index()'は、'groupby'によってバラバラになったインデックス番号を0始まりの連番に振り直す操作を行いたい時に使います**。
・'.query()で条件を指定しています。

※こちらのコードでも同様の結果を出力します  

```:コード
df_receipt.groupby('store_cd').agg({'amount':'mean'}).reset_index().query('amount >= 330')
```
ActiveRecord::StatementInvalid: SQLite3::BusyException: database is locked


###はじめに
rails tutorialを学習中です。
学習中、テスト実行時に何度も遭遇したエラー

```
RuntimeError:         RuntimeError: database is locked
```

```
ActiveRecord::StatementInvalid:         ActiveRecord::StatementInvalid: SQLite3::BusyException: database is locked
```
これらがようやく回避できるようになりましたので記しておこうかと思います。


因みに余談ですが、9章まではこのエラーが出ても何度か繰り返し

```
rails test
```
とすると5回目くらいでパスすることが出来ていました。(非常に面倒でした)
しかし9章にて何度実行してもパス出来なくなりました。

###試したこと
①rails consoleにて

```
ActiveRecord::Base.connection.execute("BEGIN TRANSACTION; END;")
```
を実行

結果　効果なし

②database.ymlファイルにて、timeoutの値を5000から15000に変更

結果　効果なし

③db/test.sqlite3ファイルの名前を変更

```
#sample_app/dbディレクトリにて
mv test.sqlite3 new.test.sqlite3
```
元と同じファイル名でコピー。

```
cp -p new.test.sqlite3 test.sqlite3
```
new.test.sqlite3ファイルは消去

結果　効果なし

④DB Browser for SQLiteに移り、以下のショートカットを実行
Ctrl + S
(左上の[ファイル]から[変更の書き込み]でもいいと思います。ちなみに私は変更がなかったからか、クリックできませんでした。意味がないとわかりつつも一応コマンドでCtrl + Sをしてみました) 
更に念のためと
Ctrl + Shift + S

2つのショートカット実行後、DB Browser for SQLiteを終了、ターミナルなども全て一度終了し、起動しなおす。

結果　効果なし

⑤test/test_help.rbファイルの

```
#恐らく8、9行目くらい
parallelize(workers: :number_of_processors, with: :threads)
```
をコメントアウトにする

```
# parallelize(workers: :number_of_processors, with: :threads)
```

結果　エラーが表示されず、テストがパスするようになった!!

###参考記事
①②④
https://stackoverflow.com/questions/58854780/what-does-the-database-is-locked-error-message-mean-in-ruby-on-rails-testing
③
http://fanblogs.jp/scripts/archive/61/0
⑤
https://stackoverflow.com/questions/58854780/what-does-the-database-is-locked-error-message-mean-in-ruby-on-rails-testing (一番最後の回答)

###終わりに
同じエラーに悩まされている方の参考になれば幸いです。
Excelのシートをうっかり消した上に復元不可で泣いた話

#結論：シート削除した直後に`ctrl + Y`を押さない

大事なことなので結論から言いました。
私は今日、一時間かけて作ったExcelの資料を完全に消失させてしまいました。
これはその経緯と、防止策の共有です。
この**Yの悲劇**が繰り返されないことを祈ります。

##気合いれて資料を作った
これは適当なサンプルですが、図表を含んだまあまあ手の込んだ資料を作っていました。
よく見てください、タイトルがBook1です。まだ一回も保存していません。

![概要.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/231874/bcf50ae0-b770-9c0c-d274-ca7711120f4f.png)

##いらないシートを消した
別のシートにメモやらタスクやらを書いていましたが、いらなくなったので消しました。
この時、シートが空ではないのでアラートのポップアップがでます。
削除をクリックしてシートを消しました。
![アラート.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/231874/a0e670a6-04c7-ffdc-0aa2-5f1a6c76bd34.png)

##いやでもやっぱあのシートいるな？
ここですこし慌てました。あれやっぱあのシートいるかな？`ctrl + z`!!
戻らない、なにか違う操作してたかな？`ctrl + shift + z`!!
んん？？

（エクセルでは一度削除したシートは戻ってきません。
削除時のポップアップに「完全に」と書いてあるとおりです。
ついでにスプレッドシートでも「戻る」では戻ってこず、履歴から復元になります）

##もう一度別のシートを消して試そう（）
別のいらないシートを消して、他のコマンドを試そうと…（まさか`ctrl + Y`じゃーないよな～「進む」だしな～）と思いながら…`ctrl + Y`を押してしまったのです…。

![履歴.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/231874/7834ed92-40bf-0a4b-19c1-e7885e3d8771.png)

？？？？
あれえ？？？

はい、次元の彼方へと消え去りました。
原因は言うまでもなく`ctrl + Y`なのですが、こいつが曲者でした。
1. 進むではなく「直前の操作をやりなおす」（今回の場合「シートの削除」をやり直します）
2. 削除確認のポップアップは表示されない（泣！！！）

つまり`ctrl + Y` = **強制削除**のコマンドになってしまったのです。
連打すると連打した数だけシートが消え、永遠に戻ってきません。

ああ私の一時間よさようなら…。

##防止策

・保存する
とにもかくにも保存です。集中して一気に作ってしまいたい気持ちはありますが、せっかく作ったものを無駄にしないためにも、保存！保存です！
そうすれば消去した時点で保存せずに閉じる、ないしは別名で保存すれば、前回保存状態は残せます！

・ブックの保護
シートが消えると困るな、けどまたやらかしそうだな、という時はブックの保護をするとシート操作ができなくなります。削除だけでなく追加や名前変更もできないので、「ほんとに絶対にまじで消したくない」という時にかけるといいかもしれません。私は今日の悲劇後の残り時間はすべてこれで過ごしました。

・`ctrl + Y`を使用しない
…これだね。
RxSwiftでUserDefaults

# RxSwiftでUserDefaultsをControlPropertyとして扱う
TextField.rx.textのように双方向に対応してます。（ObserverでありObservableでもあるみたいな。）
意外とCocoaPodsで転がってそうなコードなのになかった。

```UserDefaults+Rx.swift

import Foundation
import RxSwift
import RxCocoa

public extension Reactive where Base: UserDefaults {
	
	func `default`<E: Equatable>(forKey key: String) -> ControlProperty<E?> {
		let source = Observable.deferred { [weak defaults = self.base as UserDefaults] () -> Observable<E?> in
			let center = NotificationCenter.default
			let initial = defaults?.object(forKey: key) as? E
			let changes = center.rx.notification(UserDefaults.didChangeNotification)
				.map { _ in defaults?.object(forKey: key) as? E }
			
			return Observable.just(initial)
				.concat(changes)
				.distinctUntilChanged { previous, next in
					guard let previous = previous, let next = next else { return false }
					return previous == next
			}
		}
		
		let binder = Binder(self.base) { (defaults, value: E?) in
			defaults.set(value, forKey: key)
		}
		
		return ControlProperty(values: source, valueSink: binder)
	}
	
	func url(forKey key: String) -> ControlProperty<URL?> {
		let source = Observable.deferred { [weak defaults = self.base as UserDefaults] () -> Observable<URL?> in
			let center = NotificationCenter.default
			let initial = defaults?.url(forKey: key)
			let changes = center.rx.notification(UserDefaults.didChangeNotification)
				.map { _ in defaults?.url(forKey: key) }
			
			return Observable.just(initial)
				.concat(changes)
				.distinctUntilChanged { previous, next in
					guard let previous = previous, let next = next else { return false }
					return previous == next
			}
		}
		
		let binder = Binder(self.base) { (defaults, value: URL?) in
			defaults.set(value, forKey: key)
		}
		
		return ControlProperty(values: source, valueSink: binder)
	}
}
```

# 使用例

いろいろRx系ライブラリ使って書いてるんでなんとなく雰囲気だけ感じてください。
ドキュメントピッカー開いて選ばれたやつをUserDefaultsに記憶。

```
let documentUrl = UserDefaults.standard.rx.url(forKey: "documentUrl")

pickDocumentButton.rx.tap
	.mapTo(UIDocumentPickerViewController(documentTypes: ["public.item"], in: .open))
	.do(onNext: presentView.accept)
	.flatMapAt(\.rx.didPickDocumentAt)
	.bind(to: documentUrl)
	.disposed(by: disposeBag)
```
クラス名とファイル名が一致しないエラーの罠

##0.はじめに
筆者はバリバリの初心者なので内部の仕組みは分からないし、この記事の内容も100％正確とは言い切れません。

#1.有名なあのエラー
Unityを独学で勉強しようとGoogleを徘徊した時、多くのサイトで**「初心者がしやすいエラー」**として
**クラス名とファイル名(スクリプト名)が一致していない**というものが紹介されていた。実際にエラーを体験したという人もいるはず。

Consoleに表示されるのはこれ ↓
>Can't add script component "ファイル名(スクリプト名)" because the script class cannot be found. Make sure that there are no compile errors and that the file name and class name match.
Google翻訳：スクリプトクラスが見つからないため、スクリプトコンポーネント「ファイル名(スクリプト名)」を追加できません。 コンパイルエラーがなく、ファイル名とクラス名が一致していることを確認してください。

Inspectorに表示されるのはこれ ↓
>No MonoBehaviour scripts in the file, or their names do no match the file name.
Google翻訳：ファイルにMonoBehaviourスクリプトがないか、ファイルの名前がファイル名と一致していません。

#2.クラス名とファイル名が一致してるのに...
初めての2Dゲームを制作している時、例のエラーが発生したので調べてみたが原因がわからなかった。
どちらも"MoveText"という風に**クラス名もファイル名(スクリプト名)も一致しているのにエラーが出ている。**
（タップした場所に表示されたテキストが上昇して消える、というものを作っていた）

エラーのことを調べながらこんなことを考えたり試したりした ↓

- 予約語を使っているかも！→名前を別のものに変える(4回変えた)

- 名前の後や前にあるスペースがクラス名と認識されて一致しないのでは？

- 日本語入力でアルファベットを入力したとか？

- 中身が間違っているんじゃないか？→変数名や演算子などを書き換え

- etc...

が、すべて関係のないものだった。
（再起動は~~面倒くさいから~~やらなかった）

#3.結論
1時間苦戦してやっと目当ての記事を見つけた ↓
https://teratail.com/questions/172017

内容はなんだか難しそうでよく分からなかったけど、

>既存スクリプトにバグが無いかを確認する

この１行だけ読めた。
後で確認するとこの時、「DestroyMe」というスクリプトの中で「DestroyMe(this.gameObject)」と記述していた。
（本来ならメソッド名は「Destroy」のはずがスクリプト名の「DestroyMe」にしてしまっていた）

要は、**「既存スクリプトにバグがあった」**ということになる。

#4.まとめ
検索してもなかなか出てこないのでこのエラーに1時間も費やしてしまった。~~検索スキルが低いだけかもしれない~~
スクリプト名を間違えやすい名前にするだとか、エラーを放置するといったことは避けた方が良さそう。

余談だけど、１時間悩んだうちの20分はエラー本文のclassをdassと訳していたから。エラーが出ても焦らずに対処しよう！
Dockerをとりあえず使ってみるためのコマンド

#概要
この記事では筆者がとりあえずDockerというものを使ってみたいと思った時に調べた使い方についてメモしたものです。

#実行環境
- windows10 home
- Docker Quickstart Terminalインストール済み

##DockerHubアカウントを作成
https://hub.docker.com/ こちらのページからアカウントを作成できます。


## Docker Hubにログイン
```:input
$ docker login
```
作成したユーザ名とパスワードを入力

```:out
Login Succeeded
```


##Docker Hub Libraryからimageをpullする
```:input
$ docker pull {image名}
```
```:hello-worldの場合
latest: Pulling from library/hello-world
Digest: sha256:7f0a9f93b4aa3022c3a4c147a449bf11e0941a1fd0bf4a8e6c9408b2600777c5
Status: Image is up to date for hello-world:latest
docker.io/library/hello-world:latest
```


##imageからコンテナを作成し、コンテナ内に入る（実行するだけなら-itはいらない）
```:input
$ docker run -it {image名}
```


##コンテナを抜ける
```:input
$ exit
```


##コンテナをアクティブにしたまま抜ける
ctrl + p + q


##コンテナ一覧を見る
```:input
$ docker ps -a
```
```:out
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                        PORTS               NAMES
c48468f185c5        ubuntu              "/bin/bash"         26 hours ago        Exited (255) 20 minutes ago                       priceless_khayyam
```

## Localリポジトリを見る

```:input
$ docker images
```

```:out
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
ubuntu                   latest              4e2eef94cd6b        2 weeks ago         73.9MB
```

## StatusがExitedなコンテナを再びアクティブにする
```:input
$ docker restart {コンテナ名}
```
再び"docker ps -a"とすることでSTATUSが"UP ~ seconds"になっていることが確認できる。

## 立ち上げたコンテナに再び入りなおす
```:input
$ docker exec -it {コンテナ名}
```

##commitしてコンテナを新しいimageとして保存する
```:input
$ docker commit {コンテナ名} {新しいimage名}
```
docker imagesで確認できます。


##imageをDocker Hubにpushする
```:input
$ docker tag {旧image名:旧タグ} {新image名:新タグ}
```

##Dockerfileからimageをビルドする(Dockerfileがあるフォルダにて)
```:input
$ docker build .
```
それって deno ではどうやるの？(依存関係管理編)

# deno に出会うまで

`ドメイン駆動設計`や`マイクロサービスアーキテクチャ`の自習のために保険業務アプリでも自作してみようという試みを初めてみる。仕事ではゴリゴリに `java` を使用しているけれど。プライベートでも `java` だとオモシロクナイ。バックエンドだけでなくフロントエンドも触りたいので、`javascript` のランタイムである `node.js` を最初は使っていた。

しかし、どうも `node.js` 作った人が新しい `javascript` ランタイムを作り始めたらしいと聞き、`deno` と出会う。どうせプライベートだし、新しいものに飛びついてしまえと `deno` を使いはじめる。

# 依存関係ってどうやって管理するの？

`node.js` の後悔から `package.json` を捨て去ってしまった`deno`。その代わりに `import` 文に URL を書けるんだよと言われても...。Don't Repeat Myself!、React の CDN のパスを至るところに書きたくないよ！バージョン上がったら、そうするんだ！

## 管理用ファイルを作る

そんなときは `deps.ts` というファイルに依存関係を書いてしまおうというのが現状のベストプラクティスのようである。
例えば、`oakserver` という `koa` の `deno` 版の `deps.ts` は以下のように記載されている。

```deps.ts
export { copyBytes, equal } from "https://deno.land/std@0.67.0/bytes/mod.ts";
export { Sha1 } from "https://deno.land/std@0.67.0/hash/sha1.ts";
export { HmacSha256 } from "https://deno.land/std@0.67.0/hash/sha256.ts";
export { serve, serveTLS } from "https://deno.land/std@0.67.0/http/server.ts";
...
```

外部ライブラリを使用する場合はこの `deps.ts` から必要なクラスなどをインポートすれば良い。`package.json` の `devDependency` に対応する依存関係を管理するのであれば `deps_dev.ts` などのファイルに記載すれば良い。[alosaur](https://github.com/alosaur/alosaur) という [NestJS](https://nestjs.com/) ライクなフレームワークでは `deps_test.ts` というファイルをテストランナーを管理するために別途用意している。

ライブラリではなく、純粋なアプリケーションとして使用するものであれば `import maps` というものでも良い。その場合、各ソースファイルの import 文の記載は `node.js` 時代のものと似たような書き方になる。繰り返すが、ライブラリとして公開するようなものには使えないので注意が必要である。

## アップデートは？

現状では、3rd party 製のソフトウェアの力を借りなければならない。`deps.ts` で依存関係を管理する場合、[dmm](https://github.com/drashland/dmm) が、`import map` で管理するのであれば、[Trex](https://github.com/crewdevio/Trex) というソフトウェアがそれぞれ役に立ちそうである。まだまだ、十分に成熟したデファクトスタンダードな依存関係管理ソフトウェアは `deno` には無いが、どちらもシンプルな仕様なので今後なにか新しいものが登場しても後悔することはないであろうと思う。

# まだまだこれから

`deps.ts` で管理するにせよ `import map` で管理するにせよ、バージョンを範囲指定するための仕組みは必要であるが、`package.json` のチルダやキャレットを使用したバージョン指定のような仕組みが `deno` やその周辺には現状存在しない。
AndroidでBootstrap

[Android Bootstrap ライブラリーをインポートする](https://akira-watson.com/android/android-bootstrap-library.html)

[AndroidBootstrapがアツい！と俺の中で話題に](https://qiita.com/shotakeu/items/4350677f1990cf172fb6)
#設定
```xml:build.gradle(app)

dependencies {
...
    implementation 'com.beardedhen:androidbootstrap:2.3.2'

}
```
IBM Cloud IAM デバイス操作権限(古記事)


**<font color=red>より詳細な権限はこちらに記載しました。</font>**
https://qiita.com/khoshina/items/f0b439fc88709376fa7e

#目的
IAMによるアクセス権限の付与について、細かい部分が公開されていないので検証してみました。
今回は、Classic Infrastructure内のデバイス操作の6箇所についてです。
(1)リブート
(2)パワーオン/オフ
(3)名前変更
(4)監査ログの表示
(5)サイズ変更
(6)デバイスのキャンセル
![貼り付けた画像_2020_09_03_19_30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/6008e88d-16d8-f8bf-465f-ca6a2ccd8fa5.png)

#検証における前提条件
今回の検証では、Classic Infrastructureにおけるアクセス許可をプリセットの**表示のみ**とします。
これに加えて、どういった権限を付加すれば必要なアクションを実施できるかを確認します。
![スクリーンショット 2020-09-03 19.50.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/d65f4009-1428-e298-80d5-8a61eb8bd27d.png)

許可セットの設定は、下記の通りGUIで確認が可能です。
[IBM Cloudポータル] -> [管理] -> [アクセスIAM] -> [ユーザー] -> [該当ユーザを選択]
 -> [クラシックインフラストラクチャー] -> [許可] -> **許可セット**

#権限がないとどうなる？
アクセス権限がない状態で操作をしようとすると、下記の様にエラーが表示されます。
しかし、これだけではどんな権限が必要なのかわかりませんね。
下の例は、デバイスのキャンセルを実行する際にアクセス権限がなく、エラーとなっている例です。
![スクリーンショット 2020-09-03 19.34.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/2df7a8d5-4fe6-8d43-ef69-769497e4ecd1.png)

#確認結果
###リブートアクションに必要な許可
結果：[クラシックインフラストラクチャー] → [許可] → [デバイス] → [IPMIリモート管理(IMPI Remote Management)]

###パワーオン/オフに必要な許可
結果：[クラシックインフラストラクチャー] → [許可] → [デバイス] → [IPMIリモート管理(IMPI Remote Management)]

###名前変更
結果：[クラシックインフラストラクチャー] → [許可] → [デバイス] → [ホスト名/ドメイン名の編集(Edit Hostname/Domain)]

###監査ログの表示
結果：[クラシックインフラストラクチャー] → [許可] → [アカウント] → [イベント・ログの表示(View Event Log)]

###サイズ変更
結果二箇所変更が必要
[クラシックインフラストラクチャー] → [許可] → [アカウント]
・サービスの追加/アップグレード
・クラウドインスタスの追加/アップグレード

・[アクセスポリシー] → [アカウント管理] → [Support Center] → [Editor]
・support.case.create
・support.case.read
・support.case.update

こちらは、アクセスポリシーになります。
最小限のアクセスを付与する場合は、新規で役割を作成してください。
![スクリーンショット_2020-09-03_22_11_26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/480e0007-1559-d68e-86e9-39cc2aef3a5b.png)
![スクリーンショット_2020-09-03_22_12_13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/d0f09608-107a-9842-adc4-8157b3a500af.png)
![ID_およびアクセス管理_-_IBM_Cloud.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/ecb68b2f-c733-5dd2-1760-9312ac239203.png)



###デバイスのキャンセル
結果：3箇所設定が必要
①[クラシックインフラストラクチャー]→ [許可] → [アカウント] → [サーバーのキャンセル(Cancel Server)]

②[アクセスポリシー]→ [アカウント管理] → [Support Center] → [Editor]
・support.case.create
・support.case.read
・support.case.update

サイズ変更同様に、役割のカスタマイズで個別に設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/8f5fa494-c37a-e197-4ea1-1fae7ed5a10c.png)




③[アクセスポリシー]→ [アカウント管理] →[Biling] → [ビューアー]
![貼り付けた画像_2020_09_03_22_20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/ddbd180c-fbcd-e0bd-ac3e-982d69cbb863.png)

##所感&注意点
確認に際してアクセスポリシーの反映までに3分〜5分ほど必要なので、少し待つことが必要でした。
ただし、クラシックインフラストラクチャーの許可変更は、ほぼタイムラグなく反映されるようです。
POSTMANにおける{{hoge}}の意味と使い方（ズバリ、それは変数です）

##概要

この記事では、POSTMANでAPIを投げるときに出てくる２つのニョロかっこ（正式名称なんて言うんでしょう。英語だとcurly bracketsって呼ばれてるやつです）で囲まれている部分について解説します。
![07.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/f20204fa-29ea-0606-4843-6e7b5ea913a6.jpeg)

なるべく一般的な説明にできるよう心がけますが、具体例として、Automation Anywhere の [IQ Bot](https://qiita.com/IQ_Bocchi/items/fab5f59230ff38a98bbd)に投げるAPIを上げているので、Automation AnywhereやIQ Bot向けの説明も入り込むことをご了承ください。

##ズバリ！

２つのニョロかっこで囲まれた文字。
それはAPIの「変数」です。

##詳しく解説

このページの最初に出ているイメージは、Automation Anywhere のクラウド版から認証トークンを取得するAPIです。

クラウド版には製品版、フリートライアル版、コミュニティエディションなどいくつか種類がありますが、どれに対しても共通のAPIを投げることができます。

上記を例に、具体的に解説していきます。

###{{hoge}}は変数なので、具体的な値に置き換えてもOK

エンドポイント部分は`{{serverURL}}/v1/authentication`となっていますね。

この`{{serverURL}}`の部分は、このまま変数にしておいてもいいし、具体的なサーバー名に置き換えても大丈夫です。

例えばコミュニティエディションの場合、ダッシュボードのURLは`https://community.cloud.automationanywhere.digital/#/home`となっています。
![08.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/a143147e-1fbb-0dc3-6a1d-60283ca9dd1c.jpeg)

ここから`/#/home`を除いた`https://community.cloud.automationanywhere.digital`が、`{{serverURL}}`に入るべき中身です。

なのでコミュニティエディションの場合、POSTMANからPOSTするエンドポイントの中身を以下のように書き換えても大丈夫ということです。

`https://community.cloud.automationanywhere.digital/v1/authentication`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/f9343321-39c4-5672-38de-961ff163e48d.png)

製品版やフリートライアル版でも、要領は同じです。
ダッシュボードを表示させたときのURLから`/#/home`を除いたものが`{{serverURL}}`に入るべきサーバーのURLです。

※フリートライアルやコミュニティエディションでは、トークンを取得するAPIは問題なく投げられますが、それ以外の実際の処理をするAPIは制限がかかっている場合があります。

###変数部分を変数として使うためには、Environmentで変数の定義をする

上記のように、サンプルのエンドポイントの`{{hoge}}`部分を直接置き換えることもできますが、そのまま変数として残しておくこともできます。
変数として使う場合は、変数をEnvironmentで定義しておく必要があります。

POSTMANのEnvironmentについては、以下の記事で詳しく解説しています。

https://qiita.com/IQ_Bocchi/items/7f2d85f90e7c0ab73590
ActiveHashを使った時のテーブル設計

今日勉強した事を忘れないうちに

ActiveHashとは
都道府県名など、基本データが変更されないデータをデータベースに保存せずに、モデル内に直接記述しデータを取り扱う事ができるGem

モデルの記述例
ハッシュに定義
{キー：id , バリュー：番号   　　キー：name, バリュー：都道府県名}
![f6414e3bc9d2c29d6dfd4febe4a66c1d.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/683447/cbcf5e18-d27a-4cf1-a01b-65c3c1cc7c35.png)

READEMEでテーブル設計を行う
日本語で分かるように書くと
![df071c244383b88b0cb388db4023596b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/683447/3b14a768-af3f-08bb-1c8f-ca51f84d0bd3.png)

このように設計すると
![124f801fc50ac1c752b2c17f15e324bd.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/683447/d75308bf-e043-56aa-c365-a922126fece5.png)

間違えて覚えているよ、とか何かあればどんどん教えてください。
よろしくお願いします。
POSTMANのEnvironmentを初心者にもわかるように解説してみる（IQ BotにAPI投げるAPIを例に）

##概要

この記事では、POSTMANのEnvironmentについて説明します。

なるべく一般的な説明にできるよう心がけますが、具体例として、Automation Anywhere の [IQ Bot](https://qiita.com/IQ_Bocchi/items/fab5f59230ff38a98bbd)に投げるAPIを上げているので、Automation AnywhereやIQ Bot向けの説明も入り込むことをご了承ください。

##Environmentとは？

### シンプル？（雑？）な説明
POSTMANの画面右上のこちらから選べる何か、それがEnvironmentです！！！
![09.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/1e2d358f-9c13-1f19-305d-439e5a47b372.jpeg)

### もう少し丁寧な説明

Environmentの概念は筆者自身も明確に教わったわけではないのですが、「変数の名前と値をセットで保持している集合」みたいなのがEnvironmentです。

上述のとおり、POSTMANの画面右上でEnvironmentを選べます（まだ作っていない人は、No Environmentだけが表示されるはずです）。

以下は筆者のPOSTMANのEnvironmentのリストです。
![10.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/d0bb5518-e1ef-6d20-d38f-ad259f69d2d8.jpeg)

CE　：　コミュニティエディション
My IQ Bot Server　：　自分のオンプレのA2019＆IQ Bot
V2　：　クラウドの製品版

と、筆者は３つの環境をあれこれ切り替えて使っているので、２つのEnvironmentがあるわけです。

それぞれのEnvironmentにserverURL、username、passwordなどの変数を作って、コミュニティエディション／オンプレ／クラウド製品版それぞれに対応する値を入れています。

実務で利用している人だと、テスト／UAT／本番などで切り分けをすることになるのだと思います。
……お！　まさに環境、「Environment」ですね。


##Environmentを作ってみよう

Environmentは、画面右上の目玉のマークから作れます。
目玉のマークをクリックすると出てくる画面で、「Environment」の「Add」をクリックします。
![11.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/538013d2-a552-a28a-9f6b-43aeef7ccc24.jpeg)

すると、こんな画面が出てくるので①②③を入力します。
![12.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/ce9f8be8-c3c6-f2d3-29df-9a8f6e62758e.jpeg)

| No. |項目|設定内容|
|:-----------|:------------|:------------|
|①|Environment名|適当（適切）な名前をつける。<br>「Community Edition」とか、環境ごとにつけるといいです。|
|②|変数名|適当（適切）な名前をつける。<br>筆者の場合は以下の４つの変数を作っています。<br>- serverURL<br>- username<br>- password<br>- token<br>機会を改めて説明しますが（いつになるやら・・・）、環境を１つしか持っていない人でもtokenだけは変数にしておいた方がいいです。|
|③|初期値|変数の初期値を設定します。<br>serverURL、username、passwordはここで指定した初期値を固定値的に使うことになるので、それぞれの環境に応じた値を設定しておきます。<br>tokenは初期値設定不要|

設定したら「Add」を押します。

##Environmentを使ってみよう

上記の設定が完了すると、こちらのリストから作成したEnvironmentが選べるようになります。
![10.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/d0bb5518-e1ef-6d20-d38f-ad259f69d2d8.jpeg)

選択するとこんな感じになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/a4bd3950-a734-5642-fda4-98b6b0d46a21.png)

上記を選択している間は、serverURL、username、passwordはいずれもCEのEnvironmentで設定した値を使ってAPIを投げることになります。

##Environmentで設定した変数を使うには

Environmentで設定した変数を使うには、エンドポイントやBodyの中で変数をあてはめたい部分に`{{変数名}}`の形で変数を入れていきます。
詳しくは[こちら](https://qiita.com/IQ_Bocchi/items/c52b48dcccf647b9d14b)の記事をご覧ください。
初めてのGit管理

# リモートリポジトリ作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700171/77e13b63-57a4-ba8a-95e5-0001c58a88da.png)

newをクリック。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700171/82cdb40a-a6af-9e62-4398-6b12cd011726.png)

好きなリポジトリネームを付けて完成。

# ローカル作業

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700171/45bd6bca-6dcb-a471-0e61-9bcfbb1bdd07.png)

sourcetreeから新規...を押下し、クローンする。

以上。