OmniAICreator/Qiita-1.07M huggingface dataset:
ROS2コマンド一覧:ros2 pkg create

【[ROS2関係トップページへ](https://qiita.com/NeK/items/7ac0f4ec10d51dbca084)】

[ROS2コマンド一覧のros2 pkg create](https://qiita.com/NeK/items/33d62c61fc1a8c0c233e#ros2-pkg-create)について，オプションを指定した場合の詳細情報．
オプションを指定すると設定ファイルに自動的に記載してくれて便利である．
一方でcreate時に指定し忘れると手動で記載しなければならない．
しかし，どこに自動的な追記がなされるのか分からなければ，手動で追記できない．
そこで対応関係を示す．

# --build-type ament_cmake
## --dependencies
依存関係を記載する．以下の例について述べる．

* --dependencies rclcpp

```xml:package.xml
<package format="3">
  <depend>rclcpp</depend>
```

```text:CMakeLists.txt
find_package(rclcpp REQUIRED)

ament_target_dependencies([target名]
  rclcpp
)
```

<details><summary>ament_target_dependenciesについて</summary>依存関係のあるlibrary, targetに対しての設定となる．また--node-nameオプションを付けない限り自動的につかない．</details>

## ---node-name
ノード(ターゲット)名を指定する．以下の例について述べる．

* --node-name my_node

```text:CMakeLists.txt
add_executable(my_node
  src/my_node.cpp
)
target_include_directories(my_node PUBLIC
  $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
  $<INSTALL_INTERFACE:include>
)
ament_target_dependencies(my_node
  [--dependenciesで指定された依存関係]
)

install(TARGETS my_node
  EXPORT export_${PROJECT_NAME}
  DESTINATION lib/${PROJECT_NAME}
)
```

<details><summary>ament_target_dependenciesについて</summary>依存関係のあるlibrary, targetに対しての設定となる．また--dependenciesオプションを付けない限り自動的につかない．</details>

# --build-type ament_python
## --dependencies
依存関係を記載する．以下の例について述べる．

* --dependencies rclpy

```xml:package.xml
<package format="3">
  <depend>rclpy</depend>
```

## ---node-name
ノード(ターゲット)名を指定する．以下の例について述べる．

* パッケージ名:my_package
* --node-name my_node

```py:setup.py
setup(

    entry_points={
        'console_scripts': [
            'my_node = my_package.my_node:main'
        ],
    },
)
```
Vuex の導入 / 使い方 mapGetters (初級編)

#Vuex とは

![スクリーンショット 2020-07-15 14.17.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517237/f7aabb48-1ef9-d7f9-bdfb-21e30a49c68c.png)


Vuex とは Vue.js アプリケーションのための 状態管理パターン + ライブラリ。
大規模なプロジェクト開発を行う際にコンポーネントごとで共通して利用するデータを効率的に
状態管理をすることを可能にするライブラリーです。

**初級編としてコンポーネント内で表示するところまでをこちらの記事で記載します。**

## ファイルディレクトリー
```
-- views
     |
     -- Home.vue
-- store
     |
     -- index.js
--main.js
```

### 手順① Vuex のインストール
```
npm install vuex
```

### 手順② main.js に記述
```javascript

import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'// 追加

Vue.config.productionTip = false

new Vue({
  router,
  store, //追加
  render: h => h(App)
}).$mount('#app')
```

main.jsにてstoreを使用できるように追加します。

### 手順③ storeを作成

今回は、storeフォルダー直下に、index.jsを作成し、その中で状態管理をしようと思います。

```javascript
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    count: 2 //状態を指定
  },
  getters: { //gettersには メソッドを記述
    doubleCount: state => state.count * 2, 
    tripleCount: state => state.count * 3
  },
  mutations: {

  },
  actions: {

  },
  modules: {

  }
})
```

今回は初期値としてstateに数字の2。
gettersの中には、それを2倍にするメソッドと、3倍にするメソッドを記載しております。

### 手順④ View で表示する

```javascript

<template>
  <div class="home">
    <img alt="Vue logo" src="../assets/logo.png">
    <HelloWorld msg="Welcome to Your Vue.js App"/>
    <p>{{ count }}</p>
    <p>{{ doubleCount }}</p>
    <p>{{ tripleCount }}</p>
    <button @click="increment">+1</button>
    <button @click="decrement">-1</button>
  </div>
</template>

export default {
  computed: {
    // * store.js から 状態を呼び込み
    count() {
      return this.$store.state.count
    },
    // * getters から関数を取得する
    doubleCount() {
      return this.$store.getters.doubleCount;
    },
    tripleCount() {
      return this.$store.getters.tripleCount;
    }
  },
  name: 'Home',
  components: {
    HelloWorld
  },
  methods: {
    increment(){
      this.$store.state.count++;
    },
    decrement(){
      this.$store.state.count--;
    }
  }
}
```

computedプロパティの中に

```javascript

    count() {
      return this.$store.state.count
    },
```
記述しているこちらで、storeのstateの値を読んでいます。そしてそれをcountで呼べるようにしています。

```javascript

    doubleCount() {
      return this.$store.getters.doubleCount;
    },
    tripleCount() {
      return this.$store.getters.tripleCount;
    }
```

上記二つでは、gettersで作成した2倍にする処理の関数と、3倍にする関数をこちらで
読んでいます。

ただ、この記述だとだいぶ冗長的ですよね。

それを**mapGetters**を使用し完結に書くことができます。

### mapGetters

```javascript
import { mapGetters } from 'vuex'
exportdefault {
  computed: {
    // ? オブジェクトの中に記載する場合はスプレッド演算子を使用する
    ...mapGetters(["doubleCount", "tripleCount"]),
  },
```

computedプロパティの中に{}(オブジェクト型)にすることで複数値を入れられるようにしています。

```javascript

...mapGetters(["doubleCount", "tripleCount"])
```
**配列[]**のなかに、gettersにおいた関数を複数指定するだけで、使用することができます。
Rubyでは1++++++++++1は許される

## 元ネタ

- [JavaScriptで+++は許されない+ ++は許される](https://qiita.com/matyapiro31/items/19d62605632dd90d0647)
- [C/C++ では+++は許される](https://qiita.com/Nabetani/items/ea9e141f650492b9e147)

## コード

```rb
irb(main):001:0> 1+++++++++++++++++++++++1
=> 2
irb(main):002:0> 1-----------------------1
=> 0
irb(main):003:0> 1----------------------1
=> 2
irb(main):004:0> 1+++++---------+++-+++---+1
=> 0
```

## 解説

解説というほどでもないですが，そもそもRubyにはJavaScriptやC/C++と異なりインクリメント（デクリメント）演算子`++` (`--`)は存在しません．
ということで，単純に以下のように先頭の`+`は二項演算子として解釈され，残りは単項演算子として解釈されるというだけの話です．そもそも`1+++1`が`1.+(++1)`だと知っていればどうということはないですね．

## 他の言語

### Python

Pythonにもインクリメント演算子はなく同様の振る舞いをします．

```py
>>> 1+++++++++++++++++++1
2
>>> 1-------------------1
0
```

### Rust

Rustにもインクリメント演算子はありません．
Rustには単項演算子の`+`が存在しないため `1++1` はコンパイルエラーになってしまいますが `1--1` は合法です．

```rs
fn main() {
  // println!("{}", 1++1);  // error: expected expression, found `+`
    println!("{}", 1-------------------1);  // => 0
}
```

あとはC++とJavaScriptくらいしかわからないのでネタ切れです．
ThinkPad X13 Gen 1 (AMD) + Ubuntu 20.04 における不具合の解決

## はじめに

購入したばかりの ThinkPad X13 Gen 1 (AMD) に Ubuntu 20.04 をインストールしたところ、基本的に多くの機能が問題なく動作するものの、一部クリティカルな問題が発生した。ここではその解決法について記す。

なお、マシンの構成はざっくり以下の通り:

* AMD Ryzen 7 PRO 4750U (1.70GHz, 8MB)
* Windows 10 Home 64bit - 英語版
* 32GB DDR4 3200MHz (オンボード)
* 512GB Solid State Drive, M.2 2280, PCIe Gen3x4, OPAL2.0, TLC
* 13.3型FHD液晶 (1920x1080) IPS、光沢なし、300nit、マルチタッチ非対応、狭額縁ベゼル、72%NTSC、720p HDカメラ(ThinkShutter付)、WWAN非対応、FreeSync
* 720p HDカメラ(マイクロフォン付)
* 指紋センサーあり
* 英語キーボード(バックライト付) ブラック

## 問題

マシンが届いてすぐに Windows の回復ドライブを作成し、Ubuntu 20.04 をインストールした。簡単に操作してみたところ、以下の問題点を見つけた:

* 明るさ調整が機能していない
* Suspend できない

特に前者の問題により、常にディスプレイの明るさが最大となってしまっており、充電が 3、4 時間程度しかもたない状態になっていた。流石にこれは厳しいため、解決方法を探すことにした。

## 明るさ調整ができない問題への対処

結論としては、カーネルを最新のものへと更新することで問題が解決した。具体的には、[Ubuntu 20.04 の Linux カーネルのバージョンは 5.4](https://ubuntu.com/blog/ubuntu-kernel-5-4-whats-new-with-ubuntu-20-04-lts) なのだが、これを 5.7.8 に変更したところ、明るさ調整が機能するようになった。また、バッテリーの残り時間もフル充電時にはディスプレイの明るさによっては 10 時間程度と表示されるようになった (かつ、実際に長い時間使用できている)。

カーネルバージョンの更新方法はググると複数出てくるのだが、今回は GUI から変更可能な [mainline](https://github.com/bkw777/mainline) というインストーラを使用した。使い方は非常に簡単で、使用したいバージョンを選択して "Install" ボタンをクリックすると、自動的にインストールが始まる。あとは、インストールの完了後にマシンを再起動し、GRUB から新しいバージョンのカーネルを選択すればいい。なお、コマンドラインからカーネルのバージョンを確認するには `uname -r` とするのが簡便である。

上述した流れでカーネルを気軽に変更できるのだが、注意点として、BIOS にて Secure Boot オプションをオフにしておく必要がある (mainline からインストールしたカーネルが署名されていないことで Secure Boot に失敗するため)。正確に書くと、BIOS から Security > Secure Boot > Secure Boot を OFF とする。この設定により、新しいカーネルでも起動可能となる。

なお、必ずしもバージョンを 5.7.8 とする必要はないと思われる。詳しい内容は [ここ](https://www.phoronix.com/scan.php?page=news_item&px=Renoir-Graphics-Not-Experiment)や[ここ](https://askubuntu.com/questions/1249152/ubuntu-20-04-lenovo-ideapad-5-ryzen-4800u-display-brightness-not-working)などに書いてあるが、AMD の Renoir APU のサポートがカーネルのバージョン 5.5 から experimental ではなく正式サポートとなることで、グラフィック関連の不具合が改善されるとのこと。このことから、バージョン 5.5 以上であれば改善されるのかもしれない (試していないので実際に動くかどうかは不明)。

(追記)
コメントより、[Radeon™ Software for Linux® 20.20 Release Notes](https://www.amd.com/ja/support/kb/release-notes/rn-amdgpu-unified-linux-20-20) から Radeon™ Software for Linux® 20.20 をインストールすることでも問題が解消されたとのこと (@dooooooooinggggg さん、ありがとうございます)。

## Suspend できない問題への対処

これに関しても BIOS の設定を変更することで対処した。具体的には、Config > Power > Sleep State を "Windows 10" から "Linux" へと変更した。もとの設定値は [Modern Standby](https://docs.microsoft.com/en-us/windows-hardware/design/device-experiences/modern-standby) を表わし、変更後の値は [Sleep States](https://docs.microsoft.com/en-us/windows-hardware/drivers/kernel/system-sleeping-states) のうち S3 を表わしている ([Arch Linux の Wiki](https://wiki.archlinux.org/index.php/Lenovo_ThinkPad_X1_Yoga_%28Gen_4%29#Enabling_S3) などを参照のこと)。

なお、Sleep States の S3 は、プロセッサの状態をメモリへと保存する (これは Suspend の定義通り)。これに対し、たとえば S4 は Hibernate を表わし、プロセッサの状態をディスクへと保存する。(その他の設定値については上のリンクや[ここ](https://wiki.ubuntu.com/UnderstandingSuspend)などを参照のこと)

以上、現状で気付いた不具合について、その対処法を記した。また不具合が見つかれば追記していく予定。
rails generateコマンドで不要なファイルを生成しない

## はじめに
`rails generate ...`は必要な関連ファイルを自動生成してくれる便利なコマンドですが、「このファイルは不要だな」というものがあった場合、生成する度に削除していては手間がかかります。

そこで、自動生成するファイルを設定する（不要なファイルは生成しない）方法について書いています。

参考までに環境はこちら。

- Ruby 2.5.1
- Rails 5.2.4

## generateコマンドで自動生成されるファイル

まず、どのコマンドでどのファイルが自動生成されるかを次の一覧にまとめています。

| コマンド名 | コントローラ | ビュー | モデル | マイグレーション | アセット | ルート | テスト | ヘルパー |
|:--|:--|:--|:--|:--|:--|:--|:--|:--|
| scaffold | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ |
| scaffold_controller | ○ | ○ | × | × | × | × | ○ | ○ |
| controller | ○ | ○ | × | × | ○ | ○ | ○ | ○ |
| model | × | × | ○ | ○ | × | × | ○ | × |
| migration | × | × | × | ○ | × | × | ○ | × |

## application.rbを編集する
設定方法は簡単で、`application.rb`に設定を書き込めばOKです。

例えば何も設定せず次のコマンドを打った場合、

```rb
rails g controller StaticPages home
```

次のファイルが生成されます。

```rb
      create  app/controllers/static_pages_controller.rb
       route  get 'static_pages/home'
      invoke  erb
      create    app/views/static_pages
      create    app/views/static_pages/home.html.erb
      invoke  test_unit
      create    test/controllers/static_pages_controller_test.rb
      invoke  helper
      create    app/helpers/static_pages_helper.rb
      invoke    test_unit
      invoke  assets
      invoke    coffee
      create      app/assets/javascripts/static_pages.coffee
      invoke    scss
      create      app/assets/stylesheets/static_pages.scss
```

ここで、以下のファイルが不要だと思ったとします。

- CSS, JavaScriptファイル
- testファイル

その場合、次のように設定します。

```rb
module XXX
  class Application < Rails::Application
    config.load_defaults 5.2

    config.generators do |g|  # ここから追記
      g.assets false          # CSS, JavaScriptファイル生成せず
      g.skip_routes false     # trueならroutes.rb変更せず、falseなら通常通り変更
      g.test_framework false  # testファイル生成せず
    end                       # ここまで
  end
end
```

ちなみに`g.assets`は、`g.javascripts`と`g.stylesheets`に分けて記述することもできます。

この状態で再度`rails generate ...`を行うと、次のように生成されるファイルが減っていることがわかります。

```rb
      create  app/controllers/static_pages_controller.rb
       route  get 'static_pages/home'
      invoke  erb
      create    app/views/static_pages
      create    app/views/static_pages/home.html.erb
      invoke  helper
      create    app/helpers/static_pages_helper.rb
```

だいぶスッキリしました。以上。
/ (バックスラッシュ)　について教えてください。

プログラミング（swift)を学び始めたばかりの超ドのつく初学者です。
あるネットスクールの教科書で、print関数に関する説明で、以下のような例文がありました。

let price = 100
print("値段は\(price)円です")

右も左もわからない初学者としては、二行目のバックスラッシュの働きがわからず、試しにplaygroundで、当該記号を抜いて書き実行してみたところ、

"値段は（price）円です\n"

という実行結果が出ました。
一方、\ を入れると（price）が100に変わります。
このことから、バックスラッシュの一般的な働きはどのようなものと理解すれば良いのでしょうか？　ちなみに同教科書では　\　の打ち出し方には言及していますが、働きについては説明していません。よろしくご教授いただければ幸いです。
CSSを書く上で気をつけたこと

# はじめに

私は現在、とある施設のWebサイトを作成しております。
コーディングは私でレビューは別の方にお願いしているのですが
私自身、まだまだ知識・技術ともに未熟でさまざまな指摘を受けます。

そこで指摘されたことを忘れないようにするためにこの記事を書きました。

## ページごとにCSSファイルを分ける

ページが複数がある場合、ページごとにファイルを分けて書きます。
わかりやすくなり修正の際に特定のクラスを探すのが容易になります。
また、レビューする方の負担も減ります。

## よく使う設定は変数に定義する

文字色や背景色など、よく使うものは変数に定義しておきます。

```
$main-bg-color: #〜〜〜〜;
$main-font-color: #〜〜〜〜;
$main-border-color: #〜〜〜〜;

/* 例 */
.h1 {
  color: $main-font-color;
}

.table {
  border: 1px solid $main-border-color;
}
```

## 同じ内容のクラスが複数あるときは共通クラスとしてまとめる

同じ内容のクラスが複数ある場合、共通クラスとしてまとめます。
また、共通クラスも1つのCSSファイルにまとめておきます。

ここではtable1とtable2の背景は同じ色なのでクラスの汎用性を高めるためにも
`bg-color-green`といったクラス名でまとめます。

```css
.table1-bg-color {
  background-color: green;
}

.table2-bg-color {
  background-color: green;
}
```

```css:common.css
.bg-color-green {
  background-color: green;
}
```

## 適用場所・対象が具体的なクラス名を付ける

クラス名を`.top-color`にした場合、`top`というのがどこを指しているのか曖昧です。
そのため、より具体的なクラス名にします。
ファーストビューのことを指しているなら`.first-view`、
トップページを指しているなら`.top-page` など何に当てているのかわかる名前にします。

ほかにも見出しの色だと `.heading-color`、アイコンだと`.icon-facebook`など。

## !importantはできるだけ使わない

CSSには詳細度というものがあります。
同じ要素に対して複数の宣言が行われている場合、詳細度が高い宣言が適用されます。
例えば、pタグに対して`class`でスタイルを当てた場合と`id`で当てた場合だと
`id`の方が詳細度が高いので`id`で定義したスタイルが適用されます。

```html
<p id="color-red" class="color-blue">
```

```css
#color-red {
  color: red;/* このスタイルが適用されます。 */
}

.color-blue {
  color: blue;
}
```

しかし、スタイルの最後に!importantを追加すると詳細度を無視して!importantがあるスタイルが優先されます。
!importantを多用すると、スタイルの優先順位がわかりづらくなり修正も難しくなります。
使わないと解決できないようなところ以外では使わないようにします。

```css
#color-red {
  color: red;
}

.color-blue {
  color: blue !important; /* このスタイルが適用されます。 */
}
```

### 参考：

- [詳細度](https://developer.mozilla.org/ja/docs/Web/CSS/Specificity)
- [カスケードと継承](https://developer.mozilla.org/ja/docs/Learn/CSS/Building_blocks/Cascade_and_inheritance#Specificity_2)

## コンポーネント化する

色やサイズなどを他でも使えるように1つ1つのクラスに分けるということも重要ですが、
1つにまとめてコンポーネント化することも重要です。

例えば、円形の図でサイズとポジションを指定する場合、2つクラスを作るのではなく
`.circle`というクラスにまとめます。
要素に当てるクラスが多くなるとクラスをつけ忘れたり、
また、別ファイルに定義しているクラスだと探す手間もあります。
メンテナンスの観点からクラスを定義していく必要があります。

```css
.circle-size {
  font-size: 2rem;
}

.circle-position {
  position: absolute;
  top: 5%;
  left: 5%;
}
```

```css
.circle {
  font-size: 2rem;
  position: absolute;
  top: 5%;
  left: 5%;
}
```

## まとめ

これが初投稿となります。普段、学んだ内容はメモに取っていますが単語や一文だけで適当です。

しかし、記事を書くとなると文脈なども意識して書くため学んだ内容を整理することができました。
これからも学んだ内容の整理のために記事を書いていきたいです。

この記事の内容で間違いなどがございましたら編集リクエストまたはコメントで教えていただければ幸いです。
HTMLCollectionにはforEachが無い

JavaScriptからHTML要素を扱うとき、要素の配列を受け取るとHTMLCollectionという型になることがあります。

例えばSelectのOptionなどがそれに当たります。

```html
<select id="select-box">
    <option>One</option>
    <option>Two</option>
    <option>Three</option>
</select>
```

```javascript
const options = document.querySelector('#select-box').options;
```

このようにしたときにoptionsが[HTMLCollection](https://developer.mozilla.org/ja/docs/Web/API/HTMLCollection)になりますが、これは配列ではないのでforEachは使えません。

ただし、HTMLCollectionはArrayライクなObjectではあるので、以下のような方法でforEachを使うことができます。

```javascript

Array.prototype.forEach.call(options, function ..)
```

Arrayライクなオブジェクトについてはこちら https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Indexed_collections
Railsのdockerコンテナのよく使うdocker-composeコマンドとMySqlコンテナの繋ぐ方法


# これは何？
こちらはdocker composerで作成したRails,MySqlコンテナ、自分がターミナルで操作するコマンドの自分用メモです。

# コンテナの操作

## コントローラー作成
controller_nameは自分で定義する

```
$ docker-compose run --rm web rails generate controller controller_name
```

web　:　docker-compose.ymlに定義したservices名


## Model作成
model_nameは自分で定義する 引数にname:stringとかでnameカラムを作れます。

```
$ docker-compose run --rm web rails generate model model_name name:string 
```

## Modelカラム名変更

```
$ docker-compose run --rm web rails generate migration rename_[変更前のカラム名]_column_to_[モデル名(複数形)]
```

## ルーティング変更
config/routes.rbを編集後実行

```
$ docker-compose run --rm web rake routes
```

## DB作り
```
$ docker-compose run --rm web rake db:create
```

## マイグレーション
```
$ docker-compose run --rm web rake db:migrate
```

## seed実行
```
$ docker-compose run --rm web rake db:seed
```

# DB接続
コンテナへSSH接続 〜 mysqlコンテナ内でmysqlコマンド実行

## SSHで接続

```
$ docker exec -it $MYSQL_CONTAINER_NAME bash
```

でコンテナ内部に入り。

\$MYSQL_CONTAINER_NAME は \$ docker ps で調べる（$ docker-compose ps　ではなく）

作成したMySQLユーザでmysqlコマンドをいれる

```
$ mysql -uroot -p db_name
```


## MySql workbenchで接続

docker-compose.ymlのportを

```
.
.
.
ports:
      - "3306:3306"
```
で設定して（別のポート使うとworkbenchが接続できなくなる）、
workbenchのconnectionsの設定は以下のように

Connection Method: Standard を選択

```
Hostname : 127.0.0.1
Port : 3306（docker run時の特に指定してなければ）
Username : root
Password : docker run時の指定した環境変数
```

#参考資料
[serverコンテナ参考](https://qiita.com/togana/items/30b22fc39fe6f7a188ec)
[dbコンテナ参考](https://qiita.com/hihats/items/370a195209bf3bef2401)
[seedとは](https://qiita.com/takehanKosuke/items/79a66751fe95010ea5ee)
[$docker run 公式説明](https://docs.docker.jp/compose/reference/run.html)
Android開発【Kotlin】Web Viewのエラー 　"net::ERR_CHACHE_MISS"　対応

#AndroidManifist.xmlを編集
下記を追記
```xml
<uses-permission android:name="android.permission.INTERNET" />
```

```xml:AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.websarva.wings.android.webviewtest">

    <uses-permission android:name="android.permission.INTERNET" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
```
【Rails】Scopeの使い方

# 開発環境
・Ruby: 2.5.7
・Rails: 5.2.4
・Vagrant: 2.2.7
・VirtualBox: 6.1
・OS: macOS Catalina

# 基本構文

```ruby
class モデル名 < ApplicationRecord
  scope :スコープ名, -> { 条件式 }
end
```

# 使用例

下記のようユーザーのIDを降順にして5つだけ表示させたいと仮定します。

```ruby:users_controller.rb
User.order(id: desc).limit(5)
```

## 1.引数なし

```ruby:models/user.rb
class User < ApplicationRecord
  scope :recent, -> { order(id: :desc).limit(5) }
end
```

```ruby:users_controller.rb
User.recent
```

## 2.引数あり

```ruby:models/user.rb
class User < ApplicationRecord
  scope :recent, -> (count) { order(id: :desc).limit(count) }
end
```

```ruby:users_controller.rb
User.recent(5)
```
Rustで+++は許されない+ ++も許されない


そもそもRustにはインクリメント/デクリメント構文はありません、冪乗(\*\*)の構文もありません。
(使いたい場合はそれぞれ `x += 1;` や `pow` 系の関連関数[^1]を使いましょう。)
なので参考記事の `+ ++`[^2] や `+++`[^3] のような遊びは出来ません。

`+++`[^3]の記事で `&&&` と `***` が使われていたので、そちらを検証していきます。

## 前提条件

- `***`を用いる時にデリファレンス([Deref](https://doc.rust-lang.org/std/ops/trait.Deref.html))のオーバーロードを使わないようにします。
- 元記事の構文とはズレるのと何でも出来てしまうので、マクロを使わないようにします。マクロ版記事[^4]

## `&&&` のパターン

始めにRustの `x && y` の演算子の両辺はJavaScriptやC/C++のような曖昧な表現は出来なく、 `bool` しか受け入れてくれません。
そして、Rustにおける `x&&&y` という式は `x&&(&y)` と解釈され、 `y` の参照を作り `x` と論理AND演算を行う命令となります。
`true && (&false)` という式はRustでは型が合っていないのと、暗黙の型変換もないのでコンパイルエラーになります。
`x` も参照で持って `&true && (&false)` で演算するしか選択肢がないですが、この演算も下記の様にコンパイルエラーが発生します。

```rust:main.rs
fn main() {
    // let compile_error = 1 && 1;
    let x = &true;
    let y = false;
    assert_eq!(x&&&y, false);
}
```

```shell
error[E0308]: mismatched types
 --> src/main.rs:5:16
  |
5 |     assert_eq!(x&&&y, false);
  |                ^
  |                |
  |                expected `bool`, found `&bool`
  |                help: consider dereferencing the borrow: `*x`

error[E0308]: mismatched types
 --> src/main.rs:5:19
  |
5 |     assert_eq!(x&&&y, false);
  |                   ^^
  |                   |
  |                   expected `bool`, found `&bool`
  |                   help: consider removing the borrow: `y`
```

すなわちこのパターンは出来ないことになります。
理由は単純にコンパイラーが `&bool && (&bool)`  に対応していないからです。
Rustでは一部の記述パターンでは暗黙の参照外しがありますが、このパターンでは起きません。

## `***` のパターン

最後に `x***y` のパターンですが、Rustでは `x*(*(*y))` と解釈されます。
`*y` は参照外しなので純粋に `y` を `&&y` とすれば解決出来そうです。

```rust:main.rs
fn main() {
    let z = &&10;
    assert_eq!(10***z, 100);
}
```

今度はちゃんとコンパイルされ、参照が外されて、最後には `10 * 10 = 100` という式が成り立ちました。

今回は無理矢理感がありますが、`y = &&value; x***y` だけ成立するという希少なケースでしたので、
Rustで+++は許されない+ ++も許されない、 &&&も許されないけど***は(一部のケースで)許されるという結果になりました。

知識や記述の間違いがあればご指摘いただけれると嬉しいです。

[^1]: [Results for pow - Rust](https://doc.rust-lang.org/std/index.html?search=pow)
[^2]: [JavaScriptで+++は許されない+ ++は許される](https://qiita.com/matyapiro31/items/19d62605632dd90d0647)
[^3]: [C/C++ では+++は許される](https://qiita.com/Nabetani/items/ea9e141f650492b9e147)
[^4]: [Rustで+++を実現する](https://qiita.com/dalance/items/18c5f5bb5ec643ac9aec)
VSCodeの別ウィンドウでリアルタイム同期プレビュー


## 概要
MarkdownプレビューやMarpを利用したプレゼン資料など、VSCodeで編集しているMarkdownテキストの方では無くプレビュー側を見せて発表したい。2画面使って手元の画面は編集、拡張画面は発表という使い方をする。
この時、手元のテキストをその場で編集してリアルタイムに反映させたい。
軽く調べてもドンピシャな記事は出なかったけど簡単に出来たので方法をメモ。


## ファイルの自動保存をOFF以外に選択
設定から`file autosave`で検索し自動保存をOFF以外に設定(デフォルトはOFF)

反映速度はデフォルトで1000msecとなっている。  
ここの値を変えるとリアルタイムでの反映速度も変わるがあまり上げると負荷もあがるかも？？


## 別ウィンドウで複製する
コマンドパレットを開いて(cmd + shift + p)、

```
> Duplicate Workspace in New Window
```
を実行し同一のウィンドウを作成
  

## プレビューする
作成した新規ウィンドウにプレビューしたいマークダウンファイルを開いてプレビュー表示。(marpならプレゼン表示)  
画面分割されるが一方の画面のタブにプレビューを持ってくれば全画面で表示可能。  

## リアルタイム編集可能なプレゼンをする
複製先は先程のプレビュー画面表示しつつ複製元のテキストを編集することでリアルタイムに変化するプレゼンがこれで出来ます。
デュアルディスプレイで片方はプレゼン、片方はテキスト編集するという形になると思います。
Githubのプルリク時に発生するエラー「You can't perform that action at this time.」の解決法

#起きた問題
laravelで掲示板らしきものをgithubで管理しながら、制作していた時に急にプルリクができなくなってしまった。
###環境
dockerとlaravelとgithub
#発生したエラー
dockerコンテナの外から

```
git add .
git commit -m "コミット名"
git push origin "ブランチ名"
```
をし、github上でプルリクをしようとしたが、
<img width="1015" alt="スクリーンショット 2020-07-15 13.01.16.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/624073/50fadcf9-196f-ca9a-0efe-53491be26250.png">
上記の赤枠内の部分が表示されない。仕方なく、
<img width="907" alt="スクリーンショット 2020-07-15 0.56.48.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/624073/c3388ddb-d372-15e8-2a3f-0eabad2e80e6.png">
黒枠からプルリクを選択→create pull requestを選択

```
Pull request creation failed. Validation failed You can't perform that action at this time.
```
というエラーがgithub上に出力された。
#原因
制作した掲示板はgithubログインできる使用だったのだが、その掲示板に今ログインしているuserとプルリクしたgithubのアカウントが異なっていたためと思われる。
#解決策
掲示板をプルリクしたいgithubアカウントでログインし直すと解決できた。
MySQL(MariaDB)にログイン

XAMPPのコントロール・パネル(アプリケーション・マネジャー)

から「shell」を選択。

→コマンド・プロンプトのような(黒い)画面が

　開きますので、「mysql」と入力。MySQLが起動。

→抜ける(終了する)時は「quit」もしくは「exit」と入力。



・データベース作成
　create database データベース名;

・データベース一覧表示
　show databases;

・テーブル作成
　create table テーブル名 (カラム名　データ型,カラム名　データ型,‥);

・テーブル一覧表示
　show tables;

・テーブルへのデータの挿入
　１、insert into テーブル名 (カラム名, カラム名) values (値, 値);

　２、すべてのカラムに値を指定してデータを追加する場合はカラム名の指定を省略可
　　　insert into テーブル名 values (値,値,値,‥);
　
・テーブルデータの表示
　１、select カラム名, カラム名,カラム名 from テーブル名;

　２、すべてのカラムの値を取得する
　　　select * from テーブル名;


◆参考にしたサイト
データベース作成
https://www.dbonline.jp/mysql/database/
データベース一覧表示
https://www.dbonline.jp/mysql/database/index2.html
テーブル作成
https://www.dbonline.jp/mysql/table/
テーブル一覧表示
https://www.dbonline.jp/mysql/table/index2.html
テーブルへのデータの挿入
https://www.dbonline.jp/mysql/insert/index1.html
テーブルデータの表示
https://www.dbonline.jp/mysql/select/index1.html
TypeScript & Angular 勉強会 イントロダクション

## これは何？
- 社内勉強会の最初に提示したアジテーション資料です
- コードを、ひいてはプロダクトを自分ごとにするためのきっかけとして勉強会を企画しています
- 今後週イチで社内勉強会をして、資料はできるだけ外部公開していきます


## 資料集リンク
- TypeScript勉強会
    - [#1 Typescriptはじめの一歩](https://qiita.com/dairappa/items/f55fe1e7e210f28960b8)
    - [#2 型についてもう少し詳しく](https://qiita.com/dairappa/items/8c10a2b41e458a8c4f83)
    - [#3 Typescriptの関数](https://qiita.com/dairappa/items/2b0ab2db9be33605e9e2)
    - [#4 ジェネリクス](https://qiita.com/dairappa/items/54aff6a22e8e9323ee7d)
    - [#5 クラスとインタフェース](https://qiita.com/dairappa/items/8d29d692de67e2a1c87c)
    - [#6 ミックスイン、デコレータ](https://qiita.com/dairappa/items/c718ad995022abf544f2)
    - [#7 デザインパターン](https://qiita.com/dairappa/items/05fe8bca545b3df49b73)
    - [#8 型の間の関係](https://qiita.com/dairappa/items/2ab6454c989c3e13c5b2)
    - [#9 高度な型操作](https://qiita.com/dairappa/items/71cea8ec0ce86939381a)

## 勉強会のモチベーション
- 既存のプロジェクト設計に対するコレジャナイ感
    - 型を活用できていないTypeScript
    - 非同期処理やObservableの過剰利用、不適切な利用
    - 設計思想がわからないAngular構造

---
## 型を活用できていないTypescript
- any型を乱発してコンパイラに仕事をさせない
- 型指定をもっと明確にできるのにゆるいstringやEnumを使ってコンパイラに仕事をさせない
- Typescriptの強力な型を活用できていない
    - 具象型
    - Union型

---
## 非同期処理やObservableの過剰利用、不適切利用
- 非同期処理のポリシーが統一されていない
    - PromiseとObservableの混在
    - async/await と then/catch の混在
- そもそも非同期にする必要がないものを非同期化する
    - あらゆるメソッドの戻り値がObservable
    - すべてのフィールド変数がObservable

---
## 設計思想がわからないAngular
- あらゆる機能が詰め込まれるCommonUtilityクラス
- InterfaceやAbstract Classをほとんど利用しない
- Reduxを使っているようでちゃんと使えていない謎設計
- そもそもデータストアの概念がなく、Component間のデータ受け渡しリレーが発生している

---

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/447106/a0a5d1f9-9244-3831-4015-7dad5a2e3ea9.png)

---
## どうしてこうなった
- Typescript/Angularの全体の機能を理解しないまま、**部分最適**なコードを書いてしまった
    - ~~というか多分お前StackOverflowからコピペしただろ~~
- Clean Architecture や Flux などの設計思想の根本を知らずに**表面上の「ベストプラクティス」**をなぞった
    - ~~というか多分Qiitaあたりからコピペしてるだろ~~

---
## どうすれば防げる？
- ベンダーを選定すればいい？
    - 人月300万超の大手ベンダーでも余裕で頭を抱えるコードを書いてきます
- 設計ドキュメントや規約を作り込めばいい？
    - ドキュメントと実装は乖離します
    - 規約には抜け道が存在します
- レビューをすればいい？
    - やりましょう。関係者を巻き込んで一緒に。自分たちで。早いうちから。

---
## というわけで本勉強会の目的です
- 実装 〜 詳細設計 レベルでの基礎知識を学ぶ
    - Typescript/Angularの言語機能を理解し、言語が持つ強みを活かした作り方を考える
    - Clean Architecture などの高凝集が可能な全体設計について理解し、それをAngular上での設計に落とし込む
- 基礎設計〜実装が自分たちでできるようになると、当然レビューもできる
- レビューはコミュニケーション。設計思想を共有し、早め早めの軌道修正を行う
    - ぶっちゃけ納品直前/後に文句を言う方も言う方なのである

---
## 設計！！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/447106/f51a16af-9d3d-983f-df7a-ad1ca71a010d.png)

---
## 今後の進め方
- 基本的には講義形式で行います。読書会のように事前に担当範囲を読んでおく、というようなことはしません
- 毎回一つ演習問題を出して、その回答を次回の冒頭で共有してもらいます。
競技プログラミング練習記 No.44【ABC118練習】

初回 -> [はじめに](https://qiita.com/easychoco/items/a9ae28aca97cfe47091f)

[ABC118](https://atcoder.jp/contests/abc118)を解きました。
3完です！
D問題は解けていません。

|問題|時間|アルゴリズム|実行時間
|:-:|:-:|:-:|:-:|
| A |  2min |-|  5ms|
| B |  5min |ヒストグラム|  8ms|
| C |  5min |累積最大公約数| 22ms|


# まとめ
先にまとめを載せます。これ自体は最後に書いてます。

c++では`int`型から`bool`型への暗黙の型変換ができます。

出現回数を知りたいときはヒストグラムが使えます。


D問題 動的計画法おもいつかなかった><
`queue`で惜しいところまで解けちゃったので、なおさら思いつきませんでした。
理解しきれなかったのでまたこんど勉強します。。。



## A - B +/- A

```c++
  int a, b;
  cin >> a >> b;
  cout << ((b % a) ? b - a : a + b);
```
c++では`int`型から`bool`型への暗黙の型変換がされます。
`0のとき:false`
`0以外:true`
となるので、これを利用しました。

## B - Foods Loved by Everyone

``` c++
  int n, m, k, a;
  cin >> n >> m;
  vector<int> bin(m);
  for(int i = 0; i < n; ++i)
  {
    cin >> k;
    for(int j = 0; j < k; ++j)
    {
      cin >> a;
      bin[a - 1]++;
    }
  }

  int ans = 0;
  for(int i = 0; i < m; ++i)
  {
    ans += bin[i] == n;
  }
  cout << ans;
```
問題文の通りそのままやっても解けるのですが、複雑で長くなりそうですね。
`N`セットの入力で出現回数を知りたくて、順番や可逆性は必要ありません。
そういう時は、ヒストグラムを使うと解けます。


## C - Monsters Battle Royale

``` c++
// 最大公約数 : 3,4 ->  1
ll gcd(ll a, ll b) { return b ? gcd(b, a % b) : a; }

void solve()
{
  int n, a, ans;
  cin >> n >> ans;
  for(int i = 1; i < n; ++i)
  {
    cin >> a;
    ans = gcd(a, ans);
  }
  cout << ans;
}
```
これは実際に試してみると、[ユークリッドの互除法](https://www.google.com/search?q=%E3%83%A6%E3%83%BC%E3%82%AF%E3%83%AA%E3%83%83%E3%83%89%E3%81%AE%E4%BA%92%E9%99%A4%E6%B3%95&oq=%E3%83%A6%E3%83%BC%E3%82%AF%E3%83%AA%E3%83%83%E3%83%89%E3%81%AE%E4%BA%92%E9%99%A4%E6%B3%95)と同じ操作になりますね。
つまり、最大公約数を求める操作と同じです。
答えとしては全入力値の累積最大公約数を求めれば大丈夫です。




以上です。ありがとうございました。
クラスメソッド

##クラスメソッドとは
クラスに関連が深いものの、一つ一つのインスタンスに含まれるデータを使わないメソッド

#####クラスメソッドを定義する方法１
```ruby:
class クラス名
  def self.クラスメソッド
　　#クラスメソッドの処理
　end
end
```
#####クラスメソッドを定義する方法２
```ruby:

class クラス名
  class << self
    def クラスメソッド
      #クラスメソッドの処理
    end
  end
end
```
クラスメソッドを呼び出す場合は以下のようにする

```ruby:
クラス名.メソッド名
```

```ruby:
class Food
  def initialize(name)
    @name = name
  end

  #self.をつけるとクラスメソッドになる
  def self.create_foods(names)
    names.map do |name|
      Food.new(name)
    end
  end

  #インスタンスメソッド
　def eat
    "I will eat an #{@name}."
  end
end

names = ['apple', 'octopus']
#クラスメソッドの呼び出し
foods = Food.create_foods(names)
foods.each do |food|
  puts food.eat
end

#=> I will eat an apple.
#   I will eat an octopus.
```

#参照
プロを目指すためのRuby入門
[Rails][RSpec]導入と書き方　〜userモデル編〜

# これはなに
RailsでのRSpec導入とテストコードの記述方法です。
初学者が備忘録のため書いています。ご指摘等あれば頂けると幸いです。

では、いきましょう！

# Gemをインストール

```ruby:Gemfile
group :development, :test do
 gem 'rspec-rails'
 gem 'factory_bot_rails'
end


group :development do
gem 'web-console', '>= 3.3.0'
end
```

```
bundle install
```

# RSpecの基本設定

```ruby:ターミナル
#RSpec用設定ファイルの作成
rails g rspec:install

#4つのファイルが作成されます
create  .rspec
create  spec
create  spec/spec_helper.rb
create  spec/rails_helper.rb
```

.rspecに以下を追記します。

```ruby:.rspec
--format documentation
```



RSpecを走らせるコマンド`bundle exec rspec`で動作確認。
まだなにもテストコード書いてないので、`0 examples, 0 failures`と出ます。
これで動作確認完了です。

```ruby:ターミナル
$ bundle exec rspec


No examples found.

Finished in 0.00031 seconds (files took 0.19956 seconds to load)
0 examples, 0 failures
```

# ファイル作成

次に、必要なファイルを作ります。
specフォルダ下に以下のように作成。モデルのテストなのでモデルのフォルダを作成。

```
- app
- spec
    - models
        - user_spec.rb
```


次にfactory_botのフォルダとファイルを作成します。

```
- app
- spec
    - factories
        -users.rb 
```

これで必要なファイルは完成しました。

# テストコード書き方

まず、`factories/users.rb`のファイルを以下のように編集。
とりあえず進みます。

```ruby:factories/users.rb
FactoryBot.define do
  factory :user do
    name { "abc" }
    email { "aaa@bbb" }
    password              { "000000" }
    password_confirmation { "000000" }
  end
end
```

```ruby:medels/user_spec.rb
require 'rails_helper'
describe User do
  describe '#create' do
    it "nameがない場合は登録できないこと" do
      user = build(:user, name: nil)
      user.valid?
      expect(user.errors[:name]).to include("を入力してください")
    end
  end
end
```

- 一行目の`require 'rails_helper'`は、rails_helper.rb内の記述を読み込むこんでいます。この1行目の記述は、全ての~_specファイルに書くと思って頂いて大丈夫です。

- 二行目の`describe User do ~ end`はUserモデルのテストであることを示しています。

- 三行目の`describe '#create' do ~ end`はcreateメソッド（ユーザー新規登録）であることを示しています。

- 四行目の`it "nameがない場合は登録できないこと" do ~ end`はテストの説明です。この間にテストコードを書いていきます。

- `user = build(:user, name: nil)`
こちらは、buildメソッドでfactories/users.rbのuserを作成しています。作成した際、nameだけ空にしたいので、nameカラムを指定し、nilにしています。

- `user.valid?`
こちらはbuildしたuserに対して、`valid?`でバリデーションにより保存ができない状態であるか」を確かめることができます。

- `expect(user.errors[:name]).to include("を入力してください")`
こちらは、`valid?`メソッドを利用したuserに対して`errors`メソッドを利用し、なぜバリデーションにより保存ができないのかを確認することができます。
`include`マッチャは引数にとった値が、`expect`の引数である配列に含まれているかをチェックするマッチャです。
今回の場合、「nameがnilの場合は、を入力してください、というエラーが出るはずだ」ということがわかっているため、include("を入力してください")のように書くことができます。
実際にその通りになれば、このコードは意図した動作をすると確認出来ます。



実際にテストを実行してみましょう。

```ruby:ターミナル
$ bundle exec rspec

〜省略〜
1 example, 0 failures
```

特に赤文字エラーが出てなく、0 failuresとなっていれば成功です！

以上です！
ありがとうございました！
「DIコンテナのテスト以外での利点について」の自分の感想

自分の書いた DI に関する記事の「[DI (依存性注入) って何のためにするのかわからない人向けに頑張って説明してみる](https://qiita.com/okazuki/items/a0f2fb0a63ca88340ff6)」に対する、はてなブックマークのコメントで

> いや、違くない？この説明だとFactoryでいいという話になるよね(筆者もテストのMockingが容易ならDIいらないと言ってしまってるのでその認識っぽい)。
重要なのは依存を隠蔽することだよね。どっかで記事書こう

というコメントがあって実際にコメントをくれた人が以下の記事を書いてくれました。

[DIコンテナのテスト以外での利点について](https://qiita.com/crexista/items/606976d941728a90b42b)

依存仕様の隠蔽（記事の著者の人の定義した言葉）で述べられているメリットで (swift の細かい文法わからないので C# で書くと…) 以下のように Service クラスのコンストラクターに DI コンテナを直で渡すと Service を作る人は DI コンテナさえ渡せばよくて、Service がだれに依存しているかという Service を使う人にとっては本来不要な情報を隠せて便利といってます。 (ざっくりとした私の解釈なので元記事を読むのをお勧め)

```csharp
public interface IUserRepository { ... }

public class UserRepositoryImpl : IUserRepository { ... }

public class Service
{
  private readonly IUserRepository _repo;
  public Service(ISomeDIContainer container) 
  {
     // Service がだれに依存しているかは Service の内部に隠す
     _repo = container.Resolve<IUserRepository>();
  }
  public void Execute() { ... }
}

// Service を使う人はこうすればいい
var container = ... (どうにかして DI コンテナのインスタンスは取ってくる);
var service = new Service(contaienr); // Service がだれに依存しているかなんて気にしなくていい！
```

## 感想

普通にコンストラクター引数で依存関係を明示して Service も DI コンテナに生成してもらえば Service 使う人は依存先とか気にしないでいいので、もともとのデメリットというものが、そもそも発生しないと感じました。

```csharp
public interface IUserRepository { ... }

public class UserRepositoryImpl : IUserRepository { ... }

public class Service
{
  private readonly IUserRepository _repo;
  public Service(IUserRepository repo) 
  {
     _repo = repo;
  }
  public void Execute() { ... }
}

// Service を使う人はこうすればいい
var container = ... (どうにかして DI コンテナのインスタンスは取ってくる);
var service = container.Resolve<Service>(); // Service がだれに依存いしているかなんて気にしなくていい！
```

普通に DI コンテナを使うようなフレームワークを使っていると自分で明示的に DI コンテナからインスタンスを取得する処理自体書かなくていいことがほとんど（C#, Java の Web アプリフレームワークってそういうのが多いよね？) なので、例えば HTTP リクエストを受け取る `XxxController` クラスではコンストラクター引数に指定しておけば、別の場所(ASP.NET Core だと `Startup.cs`)で書かれた DI コンテナへの型の登録に従って組み立てられたインスタンスが勝手に入ってきます。

```csharp:XxxController.cs
public class XxxController : Controller
{
  private readonly Service _service;
  public XxxController(Service service) // 勝手に DI される
  {
    _service = service;
  }

  [HttpGet]
  public ActionResult<SomeResponse> Get()
  {
    // 使えばいい
    _service.Execute();
    ...(省略)...
  }
}
```

例え Service クラスの依存先が増えたとしても Controller はコンストラクター引数で Service が欲しい！ということだけ書いておけば、Service の依存先がなんだろうと気にする必要はありません。

## まとめ

ということで、個人的な感想では「依存仕様の隠蔽」で言われるデメリットというのは、もともと発生しないのではないかという考えです。たとえファクトリーだとしても Service を組み立ててくれる人に依存先も併せて組み立ててもらうようにしておけば、Service を使う人は気にしなくていいと思います。

```csharp
public static ServiceFactory
{
  public Service MakeService() => new Service(RepositoryFactory.MakeUserRepository());
}

// Service を使う人はファクトリーにお願いする
var service = ServiceFacotry.MakeService();
service.Execute();
```

さらに DI コンテナをコンストラクター引数に渡すということは Service や全てのクラスが特定の DI コンテナに依存してしまうので取り回しがきかなくなり (別の DI コンテナにできないなど) 辛さが増すなと感じました。

そもそも、DI コンテナからインスタンスを取得するコードを色々なところで書かないといけない状況というのは、フレームワーク側か、使ってるフレームワークがサポートしてないなら自作の仕組みを1つ噛ませて、量産するコードでは DI コンテナを触らなくても済むような仕組みを入れておいた方が DI コンテナに依存しなくなり幸せになります。

別の DI コンテナにしたいときとかも少ない痛みで移行可能です。
docker jupyter themes をもとに戻したかったが、苦戦した記録

Dockerfilleに

```
RUN -jt onedark
```
を入れていたので、
この記述を消したがうまく行かないので

docker imageを消して再buildしてもらうことに
image 全部消す

```
docker-compose rm
```

その後に、

```
docker-compose up --build
```

で起動したが、onedarkはそのまま

```
RUN jt -r
```

を入れて

```
docker-compose up --build
```
を実行するが、jt -r 実行できないよと言われる。

起動した後に直接jt -r をしてjupyter を起動した。

```
docker exec -it {docker image} bash
jt -r
```

そのあとdocker stopしたあと、docker buildしなおして解決

```
docker stop {dockerimage}
docker-compose up --build
```
attr_accessorについて

##インスタンス変数とは
同じインスタンスの内部で共有される変数

```ruby:
class Food
  def initialize(name)
    #インスタンス作成時に渡された名前をインスタンス変数に保存する
　  @name = name
  end

  def eat
　　"I will eat an #{@name}"
  end
end
food = Food.new('apple')
food.hello #=> "I will eat an apple"
```

インスタンス変数はクラスの外部から参照することができない！

```ruby:
class Food
  def initialize(name)
　  @name = name
  end

  #@nameを外部から参照するためのメソッド
  def name
　　@name
  end
end
food = Food.new('apple')
#nameメソッドを経由して@nameの内容を取得
food.name #=> "apple"
```

インスタンス変数の内容を外部から変更したい場合も変更用のメソッドを定義

```ruby:
class Food
  def initialize(name)
　  @name = name
  end

  #@nameを外部から参照するためのメソッド
  def name
　　@name
  end

　#@nameを外部から変更するためのメソッド
  def name=(value)
    @name = value
  end
end
food = Food.new('apple')
#変数に代入しているように見えるが、実際はname=メソッドを呼び出している。
food.name = 'banana'
#nameメソッドを経由して@nameの内容を取得
food.name #=> "banana"
```

インスタンス変数の値を読み書きするメソッドのことを「アクセサメソッド」と呼ぶ。
これらのメソッドをいちいち書くのは面倒。
そこで登場するのが「attr_accessorメソッド」　
##attr_accessorメソッド

```ruby:
class Food
  #@nameを読み書きするメソッドが自動的に定義される
  attr_accessor :name

  def initialize(name)
　  @name = name
  end

  #@nameを外部から参照するためのメソッド
  #def name
　　#@name
  #end

　#@nameを外部から変更するためのメソッド
  #def name=(value)
    #@name = value
  #end
end
food = Food.new('apple')
#@nameを変更する
food.name = 'banana'
#@nameを参照する
food.name #=> "banana"
```
インスタンス変数の内容を読み取り専用にしたい場合は「attr_reader」
書き込み専用にしたい場合は「attr_writer」

参照
プロを目指す人のためのRuby入門
【解決済み】olタグを入れ子にした時、Firefoxで番号がうまく動かなかった

ググっても出てこなかったのでメモ。

## おこったこと

利用規約とかでこういうのを書いていた。
`<ol>` タグが入れ子になっている。

```HTML:
<h2>第5条 免責事項および損害賠償</h2>
<ol class="bracket-num">
  <li>
    当社の債務不履行または…
    <ol class="latin">
      <li>本サービスを通じて、会員間、会員または…</li>
      <li>本サービスを通じて入手した役務、情報が…</li>
      <li>本サイトから…</li>
    </ol>
  </li>
  <li>
    ...
  </li>
</ol>
```

期待される表示は以下のようなもの。

```
第5条 免責事項および損害賠償

(1) 当社の債務不履行または…
  a. 本サービスを通じて、会員間、会員または…
  b. 本サービスを通じて入手した役務、情報が…
  c. 本サイトから…
(2) ....
  a. ...
  b. ...
(3) ...
```

`(1)` のような項番は `<ol>` タグの `list-style` では指定できない。
そのため、cssの `counter` 機能を使って以下のように装飾している。

```css:
.latin > li {
  list-style: lower-latin;
}

ol {
  counter-reset: ol-counter;
}

.bracket-num > li {
  counter-increment: ol-counter;
}

.bracket-num > li::before {
  content: '(' counter(ol-counter) ') ';
}
```

(counter機能の説明は👇を読んでほしい)
[<ol>タグをcssで装飾する](https://qiita.com/fumi_nagaoka/items/7cd176732a8bebf02dad)

このcssによって、Chromeでは期待通りの表示になったが、
Firefoxでは以下のような表示になってしまった。

```
第5条 免責事項および損害賠償

(1) 当社の債務不履行または…
  b. 本サービスを通じて、会員間、会員または…
  c. 本サービスを通じて入手した役務、情報が…
  d. 本サイトから…
(2) ....
  f. ...
  g. ...
(3) ...
```

親の `<ol>` の番号の進みを、子の `<ol>` が引き継いでいる気がする。


## こうしたら直った

`(1)` の番号を、各`<ol>` ごと1に戻すために指定していた `counter-reset` を外したら直った。

```css:
ol {
  /* このぶぶん */
  counter-reset: ol-counter; 
}
```

`counter` を利用していない他の `<ol>` （.latinとか） には影響しない認識だったので、
横着して `<ol>` 自体に `counter-reset` を記述していたけれど、
firefoxではうまく動かないらしい。

とはいえ `counter-reset` がないと `(1)`の数字が無限に増え続けてしまうので、
`counter` を利用している要素にだけ効くように修正。

```css:
.bracket-num {
  counter-reset: ol-counter;
}

.bracket-num > li {
  counter-increment: ol-counter;
}

.bracket-num > li::before {
  content: '(' counter(ol-counter) ') ';
}
```

無事、なおりました！


## 結論

- cssの `counter` を使うときにはfirefoxに注意
Vue.js v-forの使い方

#Vueのv-forの使い方について理解したこと
前回の記事で理解が怪しいまま終わった「v-for」について
シンプルなコードに書くと理解出来た。
前回の記事
[Vue.jsを初めて触ってみた](https://qiita.com/H-Toshi/items/a5e68cf28e908e7b3da9)


以下今回の内容↓


```
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1>Vueの練習</h1>
<div id="main">
    <p>{{test}}</p>
    <ul>
        <li v-for='item in list'>{{item}}</li>
        <!-- Vueの中で定義したlistという変数に指定された配列を繰り返し処理する -->
        <!-- itemは配列の中身を表示する場所を{}で指定している -->
    </ul>
</div>


<script src="https://cdn.jsdelivr.net/npm/vue"></script>
<script>

new Vue({
    el:'#main',
    data:{
        test:'helo',
        list:[1,2,3,4]
    }
})

    
</script>
</body>
</html>
```
ポイントはココ！↓
html側
```<li v-for='item in list'>{{item}}</li>
        <!-- Vueの中で定義したlistという変数に指定された配列を繰り返し処理する -->
        <!-- itemは配列の中身を表示する場所を{}で指定している -->
```
js側
```
new Vue({
    el:'#main',
    data:{
        test:'helo',
        list:[1,2,3,4]
    }
})
```

つまり
**〇〇　in ✖️✖️の
「✖️✖️」でjs側のdata内の配列を格納した変数を指定。
「〇〇」はその配列の内容を表示する場所をhtml側で{}で括って指定。**

ここを押さえると理解できそうだ。
Google documentに取り消し線をつけるショートカット

毎回調べてしまうので、ここにメモ

# 【 ⌘ + shift + x 】だ！！！
![mac-keyboard^jp.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570918/c1b39616-a14b-cad1-5ad2-896d6dd2d3e1.jpeg)


# 参考
[Google ドキュメントのキーボード ショートカット](https://support.google.com/docs/answer/179738?co=GENIE.Platform%3DDesktop&hl=ja) にドキュメント内で使えるショートカットの一覧があります。
Slackを使って情報共有を活性化させよう！業務効率UPに繋がる「日報と気づき」の魅力とは？

みなさん、こんにちは
Peaceful morning株式会社でインターンをしている高橋です！

今回は自社で行なっている情報共有にまつわるTipsをご紹介します！
自社ではSlackを使って業務の始まりに「日報」と業務がすべて終わった後に「その日の気づき」を共有しています。この**「日報とその日の気づき」**を業務日にあげるという習慣をつけることで、業務の効率化、アウトップット能力の向上につながっています。

そこで、この記事では
**・「日報と気づき」とはいったいどういうものか**
**・「日報と気づき」をあげることのメリット**
を紹介します！

##日報を書こう
まずは、日報とはいったいどのようなものでしょうか。
今回は自社で使っている日報の例を掲載します。

(例)
年/ 月/日　日報
**〜今日やること〜**
OOさんにメール
記事の修正・投稿

**〜タイムスケジュール〜**
10:00〜11:00 OOさんにメール
12:00〜13:00 記事の修正・投稿


「今日やること」ではこの日に行うべき業務内容が書かれています。
「タイムスケジュール」では、実際にその業務にどれくらい時間がかかったのかが書かれています。自社ではそれぞれのメンバーがこれをGoogle Documentを使って書いています。

##日報を共有しよう
Slackではファイルを共有することが可能となっています。
共有方法としてはリンクをコピーしてSlaKc貼り付けるという、いたって単純な作業です。


「共有ボタン」をクリックし、「リンクをコピー」を選択してもらうと コピーが完了となります。
![スクリーンショット 2020-07-15 11.03.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670049/a4af6722-9960-8d41-c540-04fdeee20c71.png)

Slackでは他にも共有方法があり「Slackのファイルを添付するタブ」を選択しGoogleドライブを選択することでファイルをアップロードすることが可能となります。
共有することで、メンバー全員が他のメンバーの今日1日やること、タイムスケジュールが把握可能となります。

##気づきを書こう
すべての業務をおわると、自社ではそれぞれのメンバーが「気づき」というものをあげています。「気づき」毎日の日報の下に書いて行きます。

(例)
年/ 月/日　日報
**〜今日やること〜**
OOさんにメール
記事の修正・投稿

**〜タイムスケジュール〜**
10:00〜11:00 OOさんにメール
12:00〜13:00 記事の修正・投稿

**〜気づき〜**

「気づき」では今日一日やってみて、ここは上手く出来たと思ったことを書いたり、ここに時間が掛かってしまったから次からこうしようといった**改善点**を書いて行きます。
「気づき」を書くことにより、次業務するときに、以前出来なかった問題点の所を工夫しながら作業を行うことができます。

##気づきを共有しよう

「気づき」も日報と同じように、共有します。
共有することで、他のメンバーが、自分にも活かせるナレッジや、同じような仕事をする時に気をつけるべきことなどを取り入れることができます。


##日報と気づきのメリット
ここまで、日報と気づきの概要について説明していきました。では改めてそれぞれにどういったメリットがあるのかまとめます。

###日報のメリット
・メンバーそれぞれがお互いの業務を把握できる
・その日のタスクを1日の始まりに洗い出すことで、タスクを覚えておく必要性がなくなる
　（=脳内タスクがゼロになる）

###気づきのメリット
・自分の今日1日やった業務内容を振り返ることができる
・アウトプット能力があがる
・他のメンバーの気づきから気をつけるべきことなどが学べる
・次回の業務に活かすべき事項が気づきをみれば一瞬でわかる
・他のメンバーにも見せることで、一種の宣言のような形になり業務に向かう姿勢が改善できる

このように日報と気づきには多くのメリットがあります。
日報と気づきは同じシートにどんどん積み重ねていくので、昔の気づきもすぐに確認することができますし、昔のタイムスケジュールをみて、次はもっと短くしようといった風に改善することもできます。

みなさんの会社や、組織でも使ってみてください！

##Peaceful Morning株式会社について
Peaceful Morningは、『我慢しないで働ける社会を創る』というミッションのもと、業務自動化テクノロジーを通じて、我慢せず⾃由にクリエイティブな仕事ができる社会の実現を⽬指しています。
2018年の創業からRPAによる業務の自動化を促進すべく自動化メディア「RPA HACK」、RPAエンジニアの就業支援「RPA HACKフリーランス」、月5万円～のRPAサポートサービス「Robo Runner」等様々な事業を行っております。


##RPA HACKのご紹介

最後にRPA HACK（アールピーエイハック）について説明させて頂きます。
RPA HACKはPeaceful Morning株式会社が運営しているRPAメディアです。
RPA HACKでは
・日本国内のRPAの最新情報
・RPAツールのご紹介
・実際のツールの使い方の解説
などなど

これからRPAを勉強したい、RPAの知識をつけたい、RPAのエンジニアとして働いてみたいという方にはぴったりの情報がつまっております。
すでにRPA HACKでは100以上の記事があり、すべて無料でご覧いただけます！
一度でもこの記事を読んで気になった方は以下のリンクからご参照ください！

**RPA HACK**
https://rpahack.com/

**Twitterもやっております。記事の更新時にツイートでお知らせします。**
https://twitter.com/NewsRpa


###RPA HACK おすすめ記事 3選

1.**「自動化が進む世界で、時代に合わせて変化する人を応援したい――藤澤専之介氏インタビュー」**
(弊社代表のインタビューです。弊社の思いであったりビジョンがわかります！)
https://rpahack.com/sennosukefujisawa_interview

2.**「UiPath StudioXの基本をマスター！～画面構成/カード/アクション」**
(RPAツールであるUiPath StudioXの使い方を丁寧に解説しています！これからRPAを使ってみたいという方にはおすすめです！)
https://rpahack.com/uipath_studiox_1

3.**「RPAの導入事例　部門ごとに事例を紹介！」**
(RPAが実際どんな業務に使われているのかイメージがつかないという方におすすめです！)
https://rpahack.com/rpa-casestudy

この他にも、RPA関連の情報を随時更新しています！ご覧ください！

最後まで読んでいただき誠にありがとうございました！
投稿の編集と削除機能(Ruby on Rails)

#プログラミングの勉強日記
2020年7月15日　Progate Lv.196
Ruby on RailsⅣ

#投稿の編集
　投稿を編集するには、①編集したい投稿を取得、②その投稿の`content`の値を上書き、③データベースに保存する。`post.content="新しい値"`で投稿の`content`を上書きできる。

```terminal:ターミナル
$ rails console
> post=Post.find_by(id:1)
> post.content="Rails"
> post.save
```
　投稿データを編集してデータベースに保存すると、`updated_at`カラムの値がデータを更新したときの時刻に更新される。

#投稿の削除
　投稿を削除するには、削除したい投稿を取得し、その投稿に対して`destroy`メソッドを用いる。

```terminal:ターミナル
$ rails console
> post=Post.find_by(id:2)
> post.destroy
```

#投稿編集ページ
　どの投稿の編集ページか判別するために投稿編集ページのURLには編集したい投稿のidを入れる。そのためshowアクションと同様にルーティングにidを含むようになる。

```ruby:routes.rb
get "posts/:id/edit" => "posts#edit"
```

```ruby:posts_controller.rb
def edit
end
```

`posts/edit.html.erb`を作成する。
投稿詳細ページから投稿編集ページにアクセスできるように`show.html.erb`に編集リンクを追加する。

```erb:posts/show.html.erb
<%= link_to("編集", "/posts/#{@post.id}/edit") %>
```

#フォームの用意
　`<textarea>初期値</textarea>`のようにタグで囲んだ部分を初期値として設定。フォームの初期値として編集したい内容を表示する。`edit`アクションでURLのidと同じidの投稿データをデータベースから取得し、その`content`の値（=当行の内容）を初期値に設定する。

```ruby:posts_controller.rb
def edit
  @post=Post.find_by(id: params[:id])
end
```

```erb:posts/edit.html.erb
<textarea> <%= @post.content %> <textarea>
```

#フォームの値の受け取り
　入力内容を受け取るための`update`アクションを追加する。`update`アクションはフォームの値を受け取るのでルーティングを`post`にする。特定のidの投稿を更新するので、URLにidを含める。（投稿を編集した後は投稿一覧ページにリダイレクトされるのでビューは不要）

```ruby:routes.rb
post "posts/:id/update" => "posts#update"
```

```ruby:posts_controller.rb
def update
  redirect_to("/posts/index")
end
```

　フォームで入力した内容をデータベースに保存するためには、フォームのデータを`update`アクションに送信する必要がある。`form_tag`メソッド（簡単に入力フォームに必要なHTMLを作成する）を用いて、送信先を指定する。

```erb:posts/edit.html.erb
<%= form_tag("/posts/#{@post.id}/update") do %>
  <textarea> <%= @post.content %> </textarea>
  <input type="submit" value="保存">
<% end %>
```

##updateアクションの中身を作成
　1. URLに含まれたidを用いて、データベースから投稿データを取得する。

```erb:posts/edit.html.erb
<%= form_tag("/posts/#{@post.id}/update") do %>
```

```ruby:routes.rb
post "posts/:id/update" => "posts#update"
```

```ruby:posts_controller.rb
def update
  @post=Post.find_by(id: params[:id])
```

　2. フォームから編集内容を受け取り、投稿データを更新する。

```erb:posts/edit.html.erb
<textarea name="content" > ...</textarea>
```

```ruby:posts.controller.rb
def update
  @post.content=params[:content]
  @post.save
```

#getとpostの使い分け
get：データベースを変更しないアクション
post：データベースを変更するアクション

#削除機能の作成
　`destroy`アクションのルーティングも`post`にする。`post`用のリンクを作るためには、`link_to`の第三引数に`{method: "post"}`を追加する。

```erb:posts/show.html.erb
<%= link_to("削除", "/posts/#{@post.id}/destroy", {method: "post"} ) %>
```
initializeメソッド

##initializeメソッド
・クラスからオブジェクトを作成する場合に呼び出されるメソッド

```ruby:
class Food
  def initialize
    puts 'Initialize'
  end
end
Food.new
#=> Initialized.
```
・initializeメソッドは特殊なメソッドで外部から呼び出すことはできない

```ruby:
food = Food.new
food.initialize
#=> NoMethodError: private method 'initialize' call for #<Food:0x007gfasjfasfjas>
```
LinuxからPPTPを用いてKUINS-III(京大VPN)に接続する

京都大学では, 学内限定のwebサービスをKUINS-II, KUINS-IIIと呼ばれるVPNサービスを通じて提供している. 
このVPNサービス，WindowsとmacOSには対応しているものの，[公式](http://www.iimc.kyoto-u.ac.jp/ja/faq/network/vpn/linuxvpn.html)にはLinuxに対応していない．はい，質問したのは私です．．．
しかし，何事にも抜け穴はあるものだ．[この記事](https://qiita.com/face0u0/items/35de63cc6bef9311e13e#)を見て驚愕した，どうやらOpenVpnを使用するとLinuxでもKUINS-IIに接続できるようだ．
ということは，PPTPならKUINS−IIIに接続できるんじゃないか？と思い立ち，この記事を書いてみた．

(追記)　PPTPによるサービスは2020年12月に終了するらしい

## KUINS-II, KUINS-IIIの違い
接続方法について説明する前にKUINS-IIとKUINS-IIIの違いについてはっきりしておきたい．
KUINS-IIは全学向けに提供されるVPNサービスで，論文閲覧や専攻webページの内部情報を閲覧するぐらいであればこちらで事足りる．
一方，KUINS-IIIは学内をキャンパス地域別にホストIPを持つVPNサービスであり，所属する研究室のvlanに接続することで研究室内のPCやサーバーを操作することができる．
いずれのサービスも，公式にはIKEv2による接続を推奨している一方で，IKEv2に対応していないクライアント向けにOpenVpnやPPTPによる提供も行われている．(LinuxでもパッケージをインストールすることでIKEv2を使用できるが，どう頑張ってもKUINS-IIIには接続できなかった．)
PPTPはKUINS-II, IIIいずれにも対応しているが，OpenVpnはKUINS-IIのみの対応となっているため，今回はPPTPを用いる．

## 接続の手順
OSはUbuntu 20.04 LTS Desktopを用いた．多分他のLinuxでも接続できると思う．
1. **設定**から**ネットワークマネージャ**を開く. 
2. **VPN**の項目で**+**ボタンを押して，PPTPの新しい接続プロファイルを作成すると，このような画面が表示される．
　　![Screenshot from 2020-07-15 10-50-16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274123/59b955cd-aefe-6f16-4c29-6505a24a667d.png)

- ゲートウェイを[一覧](https://www.iimc.kyoto-u.ac.jp/ja/services/kuins/vpn/pptp.html)から選択する．
- ユーザー名はECS-ID@vlan番号．

以上で接続の準備は完了で，あとはVPNのトグルをオンにするとVPNに接続できる．
Vue.jsでthis.$options.methods.function()を使ってはいけない理由

#Vue.jsのmethods
通常methodsに書いた関数の`this`はVueインスタンスを参照するので、`this.$data`などにアクセスできます。
しかし、JavaScriptの`this`は関数の親になるという決まりがあるため、`this.$options.methods.function()`という風にアクセスすると`this`が`methods`になり、エラーが発生します。
Posticoへのログイン

# Posticoのログインのやり方

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613470/761a0006-7096-8138-87d7-4f7782a46444.png)


初めての起動だったもので、ログインする際にデータベースの名前をいれるように言われても、全くわかりませんでした。
色々とググってみてはいたのですが、何も入力せずログインできるようなことも書いてあったので、それを試してもみたのですが、できず、調べるのにかなり時間を使ってしまいました。
最終的に、ターミナルの中でPostgreSQLはインストールしていたので、そこからステータスを調べたらわかるんではないかと、調べてみると、**なななんと、データベース名が載っていました！！！**

でもまさかこれで入力したからといってつながるかどうか怪しく思いながら、入れてみると、**なななんと繋がりました！！！**
今まではカリキュラム通りやればできていたので、そこまでの喜びは正直なかったのですが、自分でできたときの喜びはそれはもう一入（ひとしお）でした！！
【JavaScript】onclickイベントのreturn false; について

* onclickイベントに記述されているメソッドの後の「**return false**」役割が気になったので、それぞれの動作を確認。

#「return false」が記述されている場合
```html:
<html>
  <body>
    <a href="https://www.google.com/?hl=ja" onclick="alert('Googleにページ移動しない');return false;">
      リンク
    </a>
  </body>
</html>
```
1. リンク押下
2. 「Googleにページ移動しない」がアラート表示される。
3. アラート内のOKボタン押下してもページ移動はしない。

#「return false」が記述されていない場合
```html:
<html>
  <body>
    <a href="https://www.google.com/?hl=ja" onclick="alert('Googleにページ移動');">
      リンク
    </a>
  </body>
</html>
```
1. リンク押下
2. 「Googleにページ移動」がアラート表示される。
3. アラート内のOKボタン押下後Googleにページ移動する。

どうやら、return falseをつけることでhrefを打ち消している模様
正規表現のGreedy

```py
import re

# Greedy

s = '<html><head><title>Title</title></head></html>'

print(re.match('<.*>', s))
print(re.match('<.*?>', s))
```
実行結果：

```txt
<re.Match object; span=(0, 46), match='<html><head><title>Title</title></head></html>'>
<re.Match object; span=(0, 6), match='<html>'>
```
一部sassが当たらなかった時

####解決したかった事

マイページ実装中に一部hamlにsassが当たらない


```ruby:show.html.haml
.MypageContents
  .MypageContents__side
    .MypageContents__side--nav
      %ul.MypageContents__side--nav--list
        %li.MypageContents__side--nav--list--item
          = link_to "商品一覧", root_path
        %h3.Mypage-nav-head 設定
      %ul.MypageContents__side--nav--list
        %li.MypageContents__side--nav--list--item
          = link_to "ログアウト", root_path
        %li.MypageContents__side--nav--list--item
          = link_to "支払い方法", root_path
  .MypageContents__user
    = current_user.nickname 
    %pさんのマイページ

こちらの
%li.MypageContents__side--nav--list--item
にsassが当たらなかった
```

 ```ruby:該当sass
  &__side {
    float: left;
    width: 280px;
    margin: 0 40px 0 0;
    &__side--nav {
      &__side--nav--list {
        &__side--nav--list--item {
          display: block;
          min-height: 48px;
          padding: 16px;
          background-color: #fff;
          font-size: 14px;
          color: #333;
          .Mypage-nav-head {
            font-size: 16px;
          }
        }
      }
    }
  }
```

####解決

```ruby:修正後sass
  &__side {
    float: left;
    width: 280px;
    margin: 0 40px 0 0;
    &--nav {
      &--list {
        &--item {
          border: 1px solid #eee;
          display: block;
          min-height: 48px;
          padding: 16px;
          background-color: #fff;
          font-size: 14px;
          color: #333;
        }
        .Mypage-nav-head {
          font-size: 16px;
        }
      }
    }
  }
```

####原因

どうやら&の使い方に誤りがあった模様。
sassでの&は親要素のクラス名まで省略してくれるものらしい。
また、.Mypage-nav-headがhamlの入れ子構造とマッチしていなかったのも原因であった。
かなりシンプルに記述する事ができた。