Vapor Trail

明るく楽しく元気よく

PhpStorm2020.1にアップデートしたら動かなくなったときの直し方(Ubuntu 18.04)

Ubuntu18.04でSnapを使用してPhpStormをインストールしていました。 PhpStormを2019.3から2020.1にアップデートしたらアイコンクリックしても起動しなくなり削除して再インストールしても起動しませんでした。

snap remove phpstorm
snap install phpstorm --classic

解決法

/home/(ユーザ名)/.config/JetBrains/PhpStorm2020.1/phpstorm64.vmoptions の次の箇所を削除したら起動するようになりました。

-Xverify:none
-javaagent: ~/jp.sourceforge.mergedoc.pleiades/pleiades.jar

PhpStormを日本語化したときに追加した設定のせいだったようです。

JetBrains 製品の日本語化マニュアル - IntelliJ IDEA
/home/(ユーザ名)/.(製品名バージョン)/config に設定していたような気がしてたのですが変わったのかなと思っていたら、2020.1からやっぱり変わったみたいですね。 support.samuraism.com

プラグインから日本語化できるようになったのでそちらを使いましょう👷 plugins.jetbrains.com

React Native入門:ニュースアプリを作りながら覚えよう/Hooks対応 2020年版 をやった

React Native入門:ニュースアプリを作りながら覚えよう/Hooks対応 2020年版

仕事ではPHPでWebアプリを作っていたがモバイルアプリ作ってみたかったのでReact Native入門した。 React Nativeの技術書もあるが出版して1年以上経過しているものしかないのでReduxとHooksも学べるUdemyの講座をやることにした。

学んだこと

Componentとpropsによるデータの受け渡し

Vue.jsと似ていたのですんなり理解できた。

外部APIからデータの取得

axios使ってるだけ

React Hooks

関数コンポーネントでもstateを持つことができるようになったらしいが、Hooks以前でなにに困っていたのかを知らないのでクラスコンポーネントではなく関数コンポーネントで書くことにどういう意味があるのかピンとこなかった。関数コンポーネントだと簡潔に書けるということと副作用が起こりにくいらしいので基本的に関数コンポーネントを使用すべきだということはわかった。

useStateとuseEffect

関数コンポーネントでstateを利用するにはフックを使用する。

  const [loading, setLoading] = useState(false);
  // 外部APIからデータを取得する
  const fetchArticles = async () => {
    setLoading(true);
    try {
      const response = await axios.get(URL);
      setArticles(response.data.articles);
    } catch (error) {
      console.error(error);
    }
    setLoading(false);
  };

  // useState([])は初期値
  const [articles, setArticles] = useState([]);
  // useEffectで第2引数に空の配列を渡すと、第1引数がmount, unmount時に実行されるが更新時には実行されない
  useEffect(() => {
    fetchArticles();
  }, []);

ステートフックの利用法 – React

5分でわかるReact Hooks - Qiita

関数コンポーネントはクラスとどう違うのか?

  • React Navigationによるページ遷移

  • Redux

コンポーネントでActionをDispatchする
Actionのtypeはアクションの種類、payloadは渡したいデータ
ActionがDispatchされるとReducerが以前のStateと渡されたデータから新しいStateを合成してStoreに持つ

VueのActionを通してMutationをCommitするみたいな

Component

  const dispatch = useDispatch();
  // storeからuser stateを取得する
  const user = useSelector((state) => state.user);
  const { clips } = user;
  // 記事がclip済みかどうか判定する
  const isClipped = () => {
    return clips.some((clip) => clip.url === article.url);
  };
  // 記事がクリップされていれば削除されていなければ追加する
  const toggleClip = () => {
    if (isClipped()) {
      dispatch(deleteClip({ clip: article }));
    } else {
      dispatch(addClip({ clip: article }));
    }
  };

Action

export const ADD_CLIP = "ADD_CLIP";
export const DELETE_CLIP = "DELETE_CLIP";
/**
 * 渡されるclipの中身はarticle object
 */
export const addClip = ({ clip }) => {
  return {
    // actionの種類
    type: ADD_CLIP,
    // payloadは渡したいデータ
    clip,
  };
};

export const deleteClip = ({ clip }) => {
  return {
    type: DELETE_CLIP,
    clip,
  };
};

Reducer

import { ADD_CLIP, DELETE_CLIP } from "../actions/user";

const initialState = {
  clips: [],
};

const reducer = (state = initialState, action) => {
  switch (action.type) {
    case ADD_CLIP:
      return {
        // 前回のstate
        ...state,
        // スプレッド演算子で前回のstateを展開、新しいデータを配列に追加する
        clips: [...state.clips, action.clip],
      };
    case DELETE_CLIP:
      return {
        ...state,
        clips: state.clips.filter((clip) => clip.url !== action.clip.url),
      };
    default:
      return state;
  }
};

export default reducer;

ややこしいっす

たぶんこれが一番分かりやすいと思います React + Redux のフロー図解 - Qiita

Reduxが分からない人のためにReduxを概念から説明してみる - Qiita

Reduxの永続化

Expo

できたやつ expo.io

ReactNativeの基本的な使い方を学びました。なんか作れそうな気がしてきた。

さくらのクラウドでディスクの容量が一杯になったときにディスクサイズを上げる

さくらのクラウドを使用していて気づいたらサーバのディスク使用量が100%になっていた。

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            471M     0  471M   0% /dev
tmpfs            99M  5.1M   94M   6% /run
/dev/vda3        36G   35G     0 100% /
tmpfs           493M     0  493M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           493M     0  493M   0% /sys/fs/cgroup

サーバで使用しているディスクの容量を拡張するには2種類方法がある。

  1. 既存のディスクをコピーしてサイズを拡張したディスクを追加する
    例えば現在のディスクサイズが40GBで100GBに増やしたいとすると、新たに100GBのディスクを追加する際に現在のディスク(40GB)の内容をコピーしてディスクを追加することができる。
  2. アーカイブを使用してディスク容量を増やす
    現在のディスクをアーカイブ化して、そのアーカイブをもとに新たなサイズのディスクを追加する方法。

どちらの方法でも既存のディスクの内容のままでディスクサイズを拡張できたが、アーカイブのほうがバックアップに特化していてできることが多いし料金も安いのでアーカイブを使用してディスクサイズを拡張したほうが良い。アーカイブの作成だとアーカイブの作成+マイアーカイブからのディスクの作成で2倍時間がかかるので、急いでいるときはディスクをコピーして追加したほうが早い。

既存のディスクをコピーしてサイズを拡張したディスクを追加する

まず拡張したいディスクが接続されているサーバを停止する。
ディスクの追加 -> ディスクを選択 -> 容量を拡張したいディスクを選択。
f:id:kyamashiro:20200404061812p:plain 40GBのディスクのコピーで約12分かかった。

2020-03-28 (土) 12:41:50...***.***.***.***石狩第1ゾーン利用開始ディスク 113200516623の作成完了
2020-03-28 (土) 12:41:50...***.***.***.***石狩第1ゾーンタスク完了ディスク 113200516623にディスク 113200428285をコピー
2020-03-28 (土) 12:32:08...***.***.***.***石狩第1ゾーンタスク開始ディスク 113200516623にディスク 113200428285をコピー

そのままディスクをサーバに接続してもディスク容量は増えないので、ディスクのコピーが完了したらパーティションサイズの拡張を行う。 manual.sakura.ad.jp

ディスク -> その他のディスク操作 -> パーティションサイズの拡張 f:id:kyamashiro:20200404062843p:plain f:id:kyamashiro:20200404062247p:plain

サーバ -> 詳細 -> ディスクからディスクの取り外し・接続を行う。

サーバを起動して確認すると増えている。

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            471M     0  471M   0% /dev
tmpfs            99M  4.9M   94M   5% /run
/dev/vda3        95G   35G   56G  39% /
tmpfs           493M     0  493M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           493M     0  493M   0% /sys/fs/cgroup

アーカイブを使用してディスク容量を増やす

サイズを拡張したいディスクのアーカイブを作成する。このときタグに @size-extendableを追加する。 f:id:kyamashiro:20200404063617p:plain

40GBで約16分かかる。

f:id:kyamashiro:20200404063739p:plain

2020-03-28 (土) 13:22:46...***.***.***.***石狩第1ゾーン利用開始アーカイブ 113200516793の作成完了
2020-03-28 (土) 13:22:45...***.***.***.***石狩第1ゾーンタスク完了アーカイブ 113200516793にディスク 113200428285をコピー
2020-03-28 (土) 13:06:14...***.***.***.***石狩第1ゾーンタスク開始アーカイブ 113200516793にディスク 113200428285をコピー

アーカイブからディスクを作成する f:id:kyamashiro:20200404065222p:plain

2020-03-28 (土) 13:55:54...***.***.***.***石狩第1ゾーン利用開始ディスク 113200516961の作成完了
2020-03-28 (土) 13:55:53...***.***.***.***石狩第1ゾーンタスク完了ディスク 113200516961にアーカイブ 113200516793をコピー
2020-03-28 (土) 13:46:10...***.***.***.***石狩第1ゾーンタスク開始ディスク 113200516961にアーカイブ 113200516793をコピー
2020-03-28 (土) 13:45:47石狩第1ゾーン操作ディスク 113200516961を作成

ディスク -> その他のディスク操作 -> パーティションサイズの拡張 サイズが増える。

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            471M     0  471M   0% /dev
tmpfs            99M  4.9M   94M   5% /run
/dev/vda3        95G   35G   56G  39% /
tmpfs           493M     0  493M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           493M     0  493M   0% /sys/fs/cgroup

参考

knowledge.sakura.ad.jp manual.sakura.ad.jp manual.sakura.ad.jp