エラーが出て、 CocoaPods をインストールできない。「You don't have write permissions for the /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/gems/2.6.0 directory.」

# 1. やりたいことを確認する。

### CocoaPods をインストールしたい。

> CocoaPodsとは、定番のCocoaの依存管理マネージャーです。アプリ開発で煩雑となりがちな外部ライブラリの管理を、簡単な記述とコマンドだけ支援するものです。
> 

https://dev.classmethod.jp/articles/cocoapods/

こちらの記事を参考に、 CocoaPods をインストールしようとしているところ。

# 2. 課題（エラーの状況、不明点、エラーログ）を確認する。

:::note warn
## cocoapods をインストールできない。

```bash
$ sudo gem install cocoapods
Password:
Fetching rexml-3.2.5.gem
Fetching colored2-3.1.2.gem
Fetching claide-1.1.0.gem
Fetching atomos-0.1.3.gem
Fetching ruby-macho-2.5.1.gem
Fetching nanaimo-0.3.0.gem
Fetching xcodeproj-1.21.0.gem
Fetching nap-1.1.0.gem
Fetching molinillo-0.8.0.gem
Fetching gh_inspector-1.1.3.gem
Fetching fourflusher-2.3.1.gem
Fetching escape-0.0.4.gem
Fetching cocoapods-try-1.2.0.gem
Fetching netrc-0.11.0.gem
Fetching cocoapods-trunk-1.6.0.gem
Fetching cocoapods-search-1.0.1.gem
Fetching cocoapods-plugins-1.0.0.gem
Fetching cocoapods-downloader-1.5.1.gem
Fetching cocoapods-deintegrate-1.0.5.gem
Fetching ffi-1.15.5.gem
Fetching ethon-0.15.0.gem
Fetching typhoeus-1.4.0.gem
Fetching public_suffix-4.0.6.gem
Fetching fuzzy_match-2.0.4.gem
Fetching concurrent-ruby-1.1.9.gem
Fetching json-2.6.1.gem
Fetching httpclient-2.8.3.gem
Fetching algoliasearch-1.27.5.gem
Fetching addressable-2.8.0.gem
Fetching zeitwerk-2.5.4.gem
Fetching tzinfo-2.0.4.gem
Fetching minitest-5.15.0.gem
Fetching cocoapods-1.11.2.gem
Fetching i18n-1.10.0.gem
Fetching activesupport-6.1.4.6.gem
Fetching cocoapods-core-1.11.2.gem
ERROR:  While executing gem ... (Gem::FilePermissionError)
    You don't have write permissions for the /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/gems/2.6.0 directory.
```

`You don't have write permissions`（ディレクトリに対する書き込み権限がありません）というエラーが出て、CocoaPods をインストールできない。

:::

:::note warn
なので当然、次のステップの `pod` コマンドを実行できない。

```bash
$ pod setup
zsh: command not found: pod
```
:::

# 3. 調査する（ググる、ドキュメントを読む）

## 3-1. 調査① permissionエラー

> ```bash
> $ gem install foreman
> Fetching: thor-0.19.4.gem (100%)
> ERROR:  While executing gem ... (Gem::FilePermissionError)
>     You don't have write permissions for the /Library/Ruby/Gems/2.3.0 directory.
> ```
> 
> エラーログをみると`You don't have write permissions`と書いてあります。
> 
> 上記のようなエラーの原因ですが、結論からいうと、システムのrubyを利用しているため、権限不足でgemのインストールができない可能性が高いです。
> 
> ルート権限でシステムのRubyにインストールをしてもいいのですが、開発環境ではrbenvでrubyを管理することをおすすめします。
> 
https://qiita.com/nishina555/items/63ebd4a508a09c481150


**「システムのrubyを利用しているため、権限不足でgemのインストールができない可能性が高い」らしい。**

 → 上記の記事を参考にし、エラーに対して対策する。

もうちょっと調べておく。

## 3-2. 調査② Rubyの調整
> MacOS標準のrubyは管理者領域(/System/Library)にあり使いにくいです。homebrew + rbenv + rubyで、一般ユーザの領域にrubyの環境を作ることをお勧めします。
>
> 
> ```bash
> $ rbenv versions
>   system
>   2.5.9
>   2.6.9
>   2.7.5
> * 3.0.3 (set by /Users/xxxxxxxx/.rbenv/version)
> 
> $ which ruby
> /Users/xxxxxxxx/.rbenv/shims/ruby
> 
> $ ruby -v
> ruby 3.0.3p157 (2021-11-24 revision 3fb7d2cadc) [x86_64-darwin20]
> 
> $ gem install cocoapods
> 
> $ pod --version
> 1.11.2
> 
> ```
> 

https://teratail.com/questions/375236

**homebrew + rbenv + rubyで、一般ユーザの領域にrubyの環境を作る。**

## 3-3. 調査③ Rubyの調整 その2

> **/bin/zsh**の場合こちらのコマンドを打ち込んでください
> 
> 
> ```
> echo 'eval "$(rbenv init -)"' >>  ~/.zshrc
> ```
> 
> ```
> source ~/.zshrc
> ```
> 

https://www.sejuku.net/blog/3958

**`source` コマンドを実行するのを忘れないようにしよう。**

# 4. 調査結果からの考察、対策を実行する

3.の調査①の記事を参考にし、エラーに対して対策する。

https://qiita.com/nishina555/items/63ebd4a508a09c481150

## ① 現状の確認
gem や ruby が、どのパスを指しているのか、現状の確認をする。

```bash
$ which gem
/usr/bin/gem

$ which ruby
/usr/bin/ruby
```

## ② rbenv のインストール
rbenv のインストールをする。

```bash
$ brew update
```

```bash
$ brew install rbenv ruby-build
```

## ③ rbenv 管理の Ruby のバージョン確認
rbenv で管理されている Ruby のバージョンを確認する。

```bash
$ rbenv versions
* system
```

## ④ インストールできる Ruby のバージョン確認
インストールできる Ruby のバージョンを以下のコマンドで確認する。

```bash
$ rbenv install -l
2.6.9
2.7.5
3.0.3
3.1.1
jruby-9.3.3.0
mruby-3.0.0
rbx-5.0
truffleruby-22.0.0.2
truffleruby+graalvm-22.0.0.2

Only latest stable releases for each Ruby implementation are shown.
Use 'rbenv install --list-all / -L' to show all local versions.
```

## ⑤ 最新の Ruby 安定版のインストール
最新の Ruby 安定版を確認し、インストールする。

> 現在の安定版は  3.1.1 です。
> 

https://www.ruby-lang.org/ja/downloads/

```bash
$ rbenv install 3.1.1
```

インストール後もう一度以下のコマンドを実行して、rbenv 管理の Ruby のバージョンを確認する。

```bash
$ rbenv versions
* system
  3.1.1
```

## ⑥ 利用する Ruby のバージョン変更
3.1.1 を global で利用するように変更する。

```bash
$ rbenv global 3.1.1
```

3.1.1 に変更していることを確認する。

```bash
$ rbenv versions
  system
* 3.1.1 (set by /Users/ryamate/.rbenv/version)
```

## ⑦ .zshrc の編集
.zshrc を編集する。（追記する）

```bash
$ vim ~/.zshrc
```

```
# rbenv にパスを通す
[[ -d ~/.rbenv  ]] && \
  export PATH=${HOME}/.rbenv/bin:${PATH} && \
  eval "$(rbenv init -)"
```

## ⑧ `source` コマンドの実行
`source` コマンドを実行する。

```bash
source ~/.zshrc
```

> 「**source**」**コマンド**は、ファイルに書かれた**コマンド**を現在のシェルで実行する、という**コマンド**です。
> 

https://atmarkit.itmedia.co.jp/ait/articles/1712/21/news015.html#:~:text=%E3%80%8Csource%E3%80%8D%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%AF%E3%80%81%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB,%E3%81%97%E3%81%A6%E4%BD%BF%E7%94%A8%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82

## ⑨ cocoapods のインストール
cocoapods をインストールする。（成功！）

```bash
$ sudo gem install cocoapods
Password:
Fetching nanaimo-0.3.0.gem
Fetching colored2-3.1.2.gem
Fetching claide-1.1.0.gem
Fetching CFPropertyList-3.0.5.gem
Fetching atomos-0.1.3.gem
Fetching ruby-macho-2.5.1.gem
Fetching xcodeproj-1.21.0.gem
Fetching nap-1.1.0.gem
Fetching molinillo-0.8.0.gem
Fetching gh_inspector-1.1.3.gem
Fetching fourflusher-2.3.1.gem
Fetching escape-0.0.4.gem
Fetching cocoapods-try-1.2.0.gem
Fetching netrc-0.11.0.gem
Fetching cocoapods-trunk-1.6.0.gem
Fetching cocoapods-search-1.0.1.gem
Fetching cocoapods-plugins-1.0.0.gem
Fetching cocoapods-downloader-1.5.1.gem
Fetching cocoapods-deintegrate-1.0.5.gem
Fetching ffi-1.15.5.gem
Fetching ethon-0.15.0.gem
Fetching typhoeus-1.4.0.gem
Fetching public_suffix-4.0.6.gem
Fetching fuzzy_match-2.0.4.gem
Fetching concurrent-ruby-1.1.9.gem
Fetching httpclient-2.8.3.gem
Fetching algoliasearch-1.27.5.gem
Fetching addressable-2.8.0.gem
Fetching zeitwerk-2.5.4.gem
Fetching tzinfo-2.0.4.gem
Fetching i18n-1.10.0.gem
Fetching activesupport-6.1.4.6.gem
Fetching cocoapods-1.11.2.gem
Fetching cocoapods-core-1.11.2.gem
Successfully installed nanaimo-0.3.0
Successfully installed colored2-3.1.2
Successfully installed claide-1.1.0
Successfully installed CFPropertyList-3.0.5
Successfully installed atomos-0.1.3
Successfully installed xcodeproj-1.21.0
Successfully installed ruby-macho-2.5.1
Successfully installed nap-1.1.0
Successfully installed molinillo-0.8.0
Successfully installed gh_inspector-1.1.3
Successfully installed fourflusher-2.3.1
Successfully installed escape-0.0.4
Successfully installed cocoapods-try-1.2.0
Successfully installed netrc-0.11.0
Successfully installed cocoapods-trunk-1.6.0
Successfully installed cocoapods-search-1.0.1
Successfully installed cocoapods-plugins-1.0.0
Successfully installed cocoapods-downloader-1.5.1
Successfully installed cocoapods-deintegrate-1.0.5
Building native extensions. This could take a while...
Successfully installed ffi-1.15.5
Successfully installed ethon-0.15.0
Successfully installed typhoeus-1.4.0
Successfully installed public_suffix-4.0.6
Successfully installed fuzzy_match-2.0.4
Successfully installed concurrent-ruby-1.1.9
Successfully installed httpclient-2.8.3
A new major version is available for Algolia! Please now use the https://rubygems.org/gems/algolia gem to get the latest features.
Successfully installed algoliasearch-1.27.5
Successfully installed addressable-2.8.0
Successfully installed zeitwerk-2.5.4
Successfully installed tzinfo-2.0.4
Successfully installed i18n-1.10.0
Successfully installed activesupport-6.1.4.6
Successfully installed cocoapods-core-1.11.2
Successfully installed cocoapods-1.11.2
Parsing documentation for nanaimo-0.3.0
Installing ri documentation for nanaimo-0.3.0
Parsing documentation for colored2-3.1.2
Installing ri documentation for colored2-3.1.2
Parsing documentation for claide-1.1.0
Installing ri documentation for claide-1.1.0
Parsing documentation for CFPropertyList-3.0.5
Installing ri documentation for CFPropertyList-3.0.5
Parsing documentation for atomos-0.1.3
Installing ri documentation for atomos-0.1.3
Parsing documentation for xcodeproj-1.21.0
Installing ri documentation for xcodeproj-1.21.0
Parsing documentation for ruby-macho-2.5.1
Installing ri documentation for ruby-macho-2.5.1
Parsing documentation for nap-1.1.0
Installing ri documentation for nap-1.1.0
Parsing documentation for molinillo-0.8.0
Installing ri documentation for molinillo-0.8.0
Parsing documentation for gh_inspector-1.1.3
Installing ri documentation for gh_inspector-1.1.3
Parsing documentation for fourflusher-2.3.1
Installing ri documentation for fourflusher-2.3.1
Parsing documentation for escape-0.0.4
Installing ri documentation for escape-0.0.4
Parsing documentation for cocoapods-try-1.2.0
Installing ri documentation for cocoapods-try-1.2.0
Parsing documentation for netrc-0.11.0
Installing ri documentation for netrc-0.11.0
Parsing documentation for cocoapods-trunk-1.6.0
Installing ri documentation for cocoapods-trunk-1.6.0
Parsing documentation for cocoapods-search-1.0.1
Installing ri documentation for cocoapods-search-1.0.1
Parsing documentation for cocoapods-plugins-1.0.0
Installing ri documentation for cocoapods-plugins-1.0.0
Parsing documentation for cocoapods-downloader-1.5.1
Installing ri documentation for cocoapods-downloader-1.5.1
Parsing documentation for cocoapods-deintegrate-1.0.5
Installing ri documentation for cocoapods-deintegrate-1.0.5
Parsing documentation for ffi-1.15.5
Installing ri documentation for ffi-1.15.5
Parsing documentation for ethon-0.15.0
Installing ri documentation for ethon-0.15.0
Parsing documentation for typhoeus-1.4.0
Installing ri documentation for typhoeus-1.4.0
Parsing documentation for public_suffix-4.0.6
Installing ri documentation for public_suffix-4.0.6
Parsing documentation for fuzzy_match-2.0.4
Installing ri documentation for fuzzy_match-2.0.4
Parsing documentation for concurrent-ruby-1.1.9
Installing ri documentation for concurrent-ruby-1.1.9
Parsing documentation for httpclient-2.8.3
Installing ri documentation for httpclient-2.8.3
Parsing documentation for algoliasearch-1.27.5
Installing ri documentation for algoliasearch-1.27.5
Parsing documentation for addressable-2.8.0
Installing ri documentation for addressable-2.8.0
Parsing documentation for zeitwerk-2.5.4
Installing ri documentation for zeitwerk-2.5.4
Parsing documentation for tzinfo-2.0.4
Installing ri documentation for tzinfo-2.0.4
Parsing documentation for i18n-1.10.0
Installing ri documentation for i18n-1.10.0
Parsing documentation for activesupport-6.1.4.6
Installing ri documentation for activesupport-6.1.4.6
Parsing documentation for cocoapods-core-1.11.2
Installing ri documentation for cocoapods-core-1.11.2
Parsing documentation for cocoapods-1.11.2
Installing ri documentation for cocoapods-1.11.2
Done installing documentation for nanaimo, colored2, claide, CFPropertyList, atomos, xcodeproj, ruby-macho, nap, molinillo, gh_inspector, fourflusher, escape, cocoapods-try, netrc, cocoapods-trunk, cocoapods-search, cocoapods-plugins, cocoapods-downloader, cocoapods-deintegrate, ffi, ethon, typhoeus, public_suffix, fuzzy_match, concurrent-ruby, httpclient, algoliasearch, addressable, zeitwerk, tzinfo, i18n, activesupport, cocoapods-core, cocoapods after 28 seconds
34 gems installed
```

## その他確認

```bash
$ which ruby
/Users/ryamate/.rbenv/shims/ruby

$ ruby -v
ruby 3.1.1p18 (2022-02-18 revision 53f5fc4236) [x86_64-darwin21]

$ pod --version
1.11.2
```