月別アーカイブ 11月 2018

takahashi 著者:takahashi

CentOS 7 でepelリポジトリのnpmでアップデートを行うとnpmが消されてしまう問題の回避方法

CentOS 7 の新環境を作り、epelリポジトリからyumでnpmをインストール。

sudo yum -y install epel-release
sudo yum -y install npm

npmのバージョンを確認すると
3.10.10
と古かったため

sudo npm -g update npm

としたところ

- fstream-npm@1.2.0 node_modules/npm/node_modules/fstream-npm
- normalize-git-url@3.0.2 node_modules/npm/node_modules/normalize-git-url
- realize-package-specifier@3.0.3 node_modules/npm/node_modules/realize-package-specifier
/usr/lib
└── (empty)

npm ERR! Linux 3.10.0-862.el7.x86_64
npm ERR! argv "/usr/bin/node" "/bin/npm" "-g" "update" "npm"
npm ERR! node v6.14.3
npm ERR! npm  v3.10.10
npm ERR! path /usr/lib/node_modules/npm/node_modules/fs-write-stream-atomic
npm ERR! code EEXIST
npm ERR! errno -17
npm ERR! syscall mkdir

npm ERR! EEXIST: file already exists, mkdir '/usr/lib/node_modules/npm/node_modules/fs-write-stream-atomic'
npm ERR! File exists: /usr/lib/node_modules/npm/node_modules/fs-write-stream-atomic
npm ERR! Move it away, and try again.

npm ERR! Please include the following file with any support request:
npm ERR!     /home/username/npm-debug.log
npm ERR! code 1

のようなエラーが出てしまい、更新に失敗します。
そればかりか…

$ npm -v
-bash: npm: コマンドが見つかりません

$ which npm
/usr/bin/which: no npm in (/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/username/.local/bin:/home/username/bin)

なんとnpm本体が消えてしまいました。
そんな馬鹿な…

流石にちょっと困ってしまったので、いろいろ調べたところ、npm公式のGitHubページのIssueでも同様の報告が上がっていました。

Try to update the npm cli and got an error #15821 – GitHub

内容を見ていくと、epelではなくnodejs公式のnodesourceというリポジトリを使用したら成功したという記述が。
半信半疑ながらも、nodesourceを使うことにしました。

とりあえず、一旦npmをアンインストールします。

sudo yum -y remove npm
$ sudo yum -y remove npm
読み込んだプラグイン:fastestmirror
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ npm.x86_64 1:3.10.10-1.6.14.3.1.el7 を 削除
--> 依存性の処理をしています: npm = 1:3.10.10-1.6.14.3.1.el7 のパッケージ: 1:nodejs-6.14.3-1.el7.x86_64
--> 依存性の処理をしています: npm = 1:3.10.10-1.6.14.3.1.el7 のパッケージ: 1:nodejs-6.14.3-1.el7.x86_64
--> トランザクションの確認を実行しています。
---> パッケージ nodejs.x86_64 1:6.14.3-1.el7 を 削除
--> 依存性解決を終了しました。

依存性を解決しました

========================================================================================================================
 Package                 アーキテクチャー        バージョン                                リポジトリー            容量
========================================================================================================================
削除中:
 npm                     x86_64                  1:3.10.10-1.6.14.3.1.el7                  @epel                  9.8 M
依存性関連での削除をします:
 nodejs                  x86_64                  1:6.14.3-1.el7                            @epel                   16 M

トランザクションの要約
========================================================================================================================
削除  1 パッケージ (+1 個の依存関係のパッケージ)

インストール容量: 26 M
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  削除中                  : 1:npm-3.10.10-1.6.14.3.1.el7.x86_64                                                     1/2
警告: ファイル /usr/lib/node_modules/npm/scripts/update-authors.sh: 削除に失敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/scripts/relocate.sh: 削除に失敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/scripts/release.sh: 削除に失敗しました: そのようなファイルやディレクトリはあり ません
警告: ファイル /usr/lib/node_modules/npm/scripts/publish-tag.js: 削除に失敗しました: そのようなファイルやディレクトリは ありません
警告: ファイル /usr/lib/node_modules/npm/scripts/maketest: 削除に失敗しました: そのようなファイルやディレクトリはありま せん
警告: ファイル /usr/lib/node_modules/npm/scripts/install.sh: 削除に失敗しました: そのようなファイルやディレクトリはあり ません
警告: ファイル /usr/lib/node_modules/npm/scripts/index-build.js: 削除に失敗しました: そのようなファイルやディレクトリは ありません
警告: ファイル /usr/lib/node_modules/npm/scripts/gen-changelog: 削除に失敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/scripts/doc-build.sh: 削除に失敗しました: そのようなファイルやディレクトリはあ りません
警告: ファイル /usr/lib/node_modules/npm/scripts/dev-dep-update: 削除に失敗しました: そのようなファイルやディレクトリは ありません
警告: ファイル /usr/lib/node_modules/npm/scripts/dep-update: 削除に失敗しました: そのようなファイルやディレクトリはあり ません
警告: ファイル /usr/lib/node_modules/npm/scripts/clean-old.sh: 削除に失敗しました: そのようなファイルやディレクトリはあ りません
警告: ファイル /usr/lib/node_modules/npm/scripts/changelog.js: 削除に失敗しました: そのようなファイルやディレクトリはあ りません
警告: ファイル /usr/lib/node_modules/npm/scripts: 削除に失敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/package.json: 削除に失敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules/realize-package-specifier: 削除に失敗しました: そのようなファイル やディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules/normalize-git-url: 削除に失敗しました: そのようなファイルやディレ クトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules/fstream-npm: 削除に失敗しました: そのようなファイルやディレクトリ はありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/write-file-atomic/package.json: 削除に失敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/write-file-atomic/index.js: 削除に失敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/write-file-atomic/README.md: 削除に失敗しました: そのよう なファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/write-file-atomic/LICENSE: 削除に失敗しました: そのような ファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/write-file-atomic: 削除に失敗しました: そのようなファイル やディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/wrappy/wrappy.js: 削除に失敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/wrappy/package.json: 削除に失敗しました: そのようなファイ ルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/wrappy/README.md: 削除に失敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/wrappy/LICENSE: 削除に失敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/wrappy: 削除に失敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/which/which.js: 削除に失敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/which/package.json: 削除に失敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/which/node_modules/isexe/windows.js: 削除に失敗しました:  そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/which/node_modules/isexe/package.json: 削除に失敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/which/node_modules/isexe/mode.js: 削除に失敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/which/node_modules/isexe/index.js: 削除に失敗しました: そ のようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/which/node_modules/isexe/access.js: 削除に失敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/which/node_modules/isexe/README.md: 削除に失敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/which/node_modules/isexe/LICENSE: 削除に失敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/which/node_modules/isexe/.npmignore: 削除に失敗しました:  そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/which/node_modules/isexe: 削除に失敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/which/node_modules: 削除に失敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/which/bin/which: 削除に失敗しました: そのようなファイルや ディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/which/bin: 削除に失敗しました: そのようなファイルやディレ クトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/which/README.md: 削除に失敗しました: そのようなファイルや ディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/which/LICENSE: 削除に失敗しました: そのようなファイルやデ ィレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/which/CHANGELOG.md: 削除に失敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/which: 削除に失敗しました: そのようなファイルやディレクト リはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/validate-npm-package-name/package.json: 削除に失敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/validate-npm-package-name/node_modules/builtins/package.json: 削除に失敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/validate-npm-package-name/node_modules/builtins/builtins.json: 削除に失敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/validate-npm-package-name/node_modules/builtins/Readme.md: 削除に失敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/validate-npm-package-name/node_modules/builtins/History.md: 削除に失敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/validate-npm-package-name/node_modules/builtins/.travis.yml: 削除に失敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/validate-npm-package-name/node_modules/builtins: 削除に失 敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/validate-npm-package-name/node_modules: 削除に失敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/validate-npm-package-name/index.js: 削除に失敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/validate-npm-package-name/README.md: 削除に失敗しました:  そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/validate-npm-package-name/LICENSE: 削除に失敗しました: そ のようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/validate-npm-package-name/.npmignore: 削除に失敗しました: そのようなファイルやディレクトリはありません
(省略)

大量の”ファイルが見つかりません”エラーが。
やっぱり本当に消えてしまってるようです…

アンインストールが完了したらnodesourceリポジトリをインストールします。

curl -sL https://rpm.nodesource.com/setup_8.x | sudo bash -

処理が完了したら、”npm”ではなく”nodejs”パッケージをインストールします。

sudo yum install -y nodejs

パッケージ名はnodejsですが、実際には同時にnpmもインストールされているため、インストールが完了すればnpmも使えます。

$ npm -v
6.4.1

バージョンも新しくなっています。

$ sudo npm -g update npm
$ which npm
/usr/bin/npm

アップデートも問題なく動作するようになったようです。

しかし、安定性の高いはずのepelリポジトリのnpmが致命的なバグを抱えたままになっているというのは…大丈夫なんでしょうか…

  • この記事いいね! (0)
村上 著者:村上

【Android】XMLデータから特定のタグの値を取得する方法

もしかしたらもっとスマートなやり方があるのかもしれませんが…問題なく動作しますので、XMLの扱いでお悩みの方は是非。
XMLデータから、特定のタグの値を取得する方法です。
なお、参考にしたサイトをうっかり失念してしまったので、今回はリンクはありません。

 

では早速、コードはこちら。

private void getXmlData(String xml) throws XmlPullParserException, IOException {
    XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
    XmlPullParser parser = factory.newPullParser();
    parser.setInput(new StringReader(xml));
    int eventType = parser.getEventType();

    String data;
    List<String> arrData = new ArrayList<>();

    while (eventType != XmlPullParser.END_DOCUMENT) {
        if (eventType == XmlPullParser.START_TAG) {
            switch (parser.getName()) {
                // データを取得したいタグが一つ
                case "[データを取得したいタグ名]":
                    parser.next();
                    data = parser.getText();
                    break;
                // データを取得したいタグが複数
                case "[データを取得したいタグ名]":
                    parser.next();
                    arrData.add(parser.getText());
                    break;
            }
        }
        eventType = parser.next();
    }
}

こんな感じです。
関数にしているので、そのままコピー&ペーストしてもらえば動作するかと思います。
なお、渡すXMLでデータは 文字列 に変換しています。

重要そうな部分だけを説明すると、10行目から XMLデータを while で、タグやデータなど 1つずつ見ていって、それが開始タグで、かつそれがデータを取得したいタグだった場合はそのタグの値を取得しています。
また、14行目からの case句は、タグが一つしかない場合のデータの取得方法で、対して 19行目からの case句は、タグが複数あった場合のデータの取得方法です。
といっても、データを格納する変数が StringList かの違いしかないのですけどね。

これでデータの取得ができますので、あとはこのデータを行いたい処理などに使ってください。

 

以上、XMLデータから特定のタグのデータを取得する方法でした。
やり方を変えれば、全タグのデータも取得できるかと思いますので、是非ご活用ください。

  • この記事いいね! (0)
asaba 著者:asaba

【ESLint】reactにESLintを導入しました

コードの品質とチームで書き方を統一するためにESLintを導入しました。これがあると、規模の大きいコードでもチームで同じ書き方を

することでリファクタリングの効率を上げることができます。

日本語での資料が少ないので、ここで自分の拙い日本語で少しずつエラー詳細を説明していきます。

 

 

一番最初に見かけたエラーがこちらです。直訳するとLFを期待したがCRLFが検出されましたという感じです。


Expected linebreaks to be 'LF' but found 'CRLF'

 

ESLintは改行コードはLFしか認可しないからか分かりませんが、コードエディターではこれが発生しました。

CRLF->LFに変えて保存で治ります。簡単ですが、多分全行コードがこのエラーをもって吐き出されるのですこし労力がいるかもです。

 

自分も最近導入したばかりなのですが、いきなり入れるとエラーが

どんどんでてくるので面食らわずにエラーを解消していってくださいね。

 

すみません、本当はこの後にどんどんエラーを紹介したかったのですが、ログが消えてしまったのと画像を撮り忘れが原因で

載せることができなくなりました。次回以降にエラーが出たらまた紹介していきたいと思います。

 

 

  • この記事いいね! (0)
著者:杉浦

phpのロギングライブラリ規定PSR-3

 webアプリケーションにおいてはそのアプリケーション上で起きた動作のログを取る事が望まれます。これは障害や攻撃が起きた際、それがいつどこで起きたのか知るため、また障害や攻撃が起きていると知るための強い助けになります。単に思うがままにログを取るのみでは可読性が悪く肝心な情報が抜けているログを生む確率が大きいです。PSR-3はphpで用いられるロギングライブラリの規格を統一する事でログの可読性、生産性を上げています。
PSR-3: Logger Interface – PHP-FIG
【PHP】PSR-3 Logger Interface(ロガーインタフェース)
 PSR-3はRFC 5424のメッセージプロトコルに沿ったログレベルとそれに合わせたロギングライブラリの実装を規定しています。RFC 5424はログメッセージをIPネットワーク上で転送するための標準規格であるsyslogについて説明しています。
 ロギングライブラリを使う側として特に重要になるのが3. Psr\Log\LoggerInterfaceです。この中にはログレベルの規定と使用例が記述されており、これに従うことによって程よい粒度で他の多くwebアプリケーションのログから大きく外れないログを作れます。PSR-3においてログの文面までは規定されていないのでそこはまた別のことを学ぶ必要があります。

  • この記事いいね! (0)
takahashi 著者:takahashi

CentOS 7 にPHP7.1をインストールする方法

最近、徐々にPHP 7系を要求するアプリケーションやフレームワークが多くなってきました。
一方で、CentOS 7はデフォルトでは古めのパッケージのみを提供しているので

sudo yum -y install php 

としてもphp5.6系しかインストールできません。

しかし、CentOSで利用できる外部のリポジトリ”epel”と”remi”を用いることでphp7系をCentOS 7へインストールすることが可能になっています。
今回は、その方法をご紹介したいと思います。

まず、現時点で古いバージョンのPHPが入っている場合は、一度アンインストールが必要になります。
もし古いバージョンのPHPも必要な場合は複数のバージョンのPHPを共存させる必要となり、今回の手順ではセットアップできませんのでご注意ください。

PHPが既にインストールされているか確認します。

php -v

として

PHP 5.4.16 (cli) (built: Apr 12 2018 19:02:01) 
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies

のようになっていれば、既に古いバージョンがインストールされているので、一旦アンインストールします。

sudo yum -y  remove  php-cli php-common

epelリポジトリをインストールします。

sudo yum -y install epel-release

remiリポジトリをインストールします。

sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

ここまで行えば、php7.1のインストールが可能になっています。
次のコマンドでphp7.1をインストールしてみます。

sudo yum install --enablerepo=remi,remi-php71 php php-devel 

インストール完了後、再度php -vをして

php -v
PHP 7.1.24 (cli) (built: Nov  7 2018 18:45:17) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies

となっていれば成功です。

なお、remiリポジトリからphpに入れた際、PHPモジュールの参照先が別の場所になってしまうことがあるようです。
その場合は、php.iniに次の記述を追加してください。

extension_dir = "/opt/remi/php71/root/usr/lib64/php/modules" 

※PHPバージョンによって異なります。”sudo rpm -ql インストールしたphpのパッケージ名”を実行してインストール先を確認してください。

  • この記事いいね! (0)
asaba 著者:asaba

【teratail】teratailで質問する前に抑えておきたいこと

 

teratailはプログラマやSEだけでなく、ネットワークエンジニアやITコンサルタントの方々も利用しているit業界ではトップクラスの

ソーシャルメディアです。スタックオーバーフローと違いこちらは国内のみの質問と回答で構成されており、これまで英語が苦手で

どこに質問していいか分からない、ヤフー知恵袋に投稿したけど同じ分野の人が見ていなくて質問が全く帰ってこないという方々の強い

味方として国内でも信頼されており、自分も去年プログラミングにおいて分からない事だらけで中々コーディングが進まない時に質問

したのですが、大抵は数時間以内に回答が返ってくるので開発スピードも極力落とさずに作ることができました。

また自分はteratailなどのメジャーなソーシャルメディアで投稿している時は、たくさんの人が閲覧しているので質問者としての立場を

忘れずに三つの決まり事を守り続けています。その三か条をざっくり説明していきたいと思います。

 

一つめは、自分がなにをしたいか明確にしておくこと です。

まず、ネットに限らず人に質問をするときは自分の分からない部分を抑えておき、回答者が答えやすいような環境を作ることが大切だと

思っています。何が分からないか分からない状態を放置して質問しても、回答者は分からないポイントがどこなのか見当がつかないので

このようなあやふやな状態で投稿しても恐らく回答が0、若しくは的外れな回答が返ってくることうけあいです。

質問をする前にエラーログを見てどのようなエラーが出ているか確認して、自分が壁に当たっている問題点を洗い出すことがポイントだと

思います。

 

二つめは、自分が試したことを予め書き出しておくこと です。

自分が詰まっている質問に回答がついた、見てみよう!と意気込んで回答を開くと、自分が過去にした解決方法が・・・(しかもそれで解決できなかった)

というパターン。自分もうっかりこのようなミスをしてしまいがっくしきてしまった過去があります。明らかにこちらの情報不足で起こる

事故であり、待った時間が無駄になってしまうので事前に自分が試したことを箇条書きでいいので書き揃えておきましょう。

これなら回答者も詳細を読み取ることができるので、その項目を除いた解決手段が見つかる可能性が高くなります。忘れずに書いておきま

しょう。

 

三つめは、質問をいただいた回答者には必ずお礼をいうこと です。

これはIT技術者以前に社会人としての常識になってしまいますね(汗)自分はqiitaやブログで解決できた時は必ずコメントで一言お礼を

言っています。答えをくださった先人たちには敬意をこめてお礼を言いましょう。日ごろから感謝の気持ちを欠かさずに利用していると、

この方は礼儀正しいし回答もしっかり見ていてくれるからまた困った時は助けてあげよう。と先人の方々もまた気持ちよく受け答えするこ

とができるので後々財産になってくると思います。またteratailではベストアンサーという制度があり、基本は一番の解決の要因となった方

の回答に付与します。答えが役に立った場合は必ずつけてあげましょう。

 

以上が僕がteratailで書き込むときに大切にしていることです。移り変わりの早いこの業界だからこそ情報を共有して助け合うことが

一番の良薬ではないかと考えています。

  • この記事いいね! (0)
著者:杉浦

変数の値で変数名を呼び出す可変変数

PHP: 可変変数 – Manual
 phpには可変変数という機能がついています。これは変数名が可変の変数という意味の言葉です。具体的に何をするかというと、次の画像の様な動作です。
 
 可変変数によって式の評価結果などを用いて変数名を動的に変更できます。他言語でも似たようなことを実現する機能はままありますが、ここまで自由な振る舞いはちょっと珍しい印象です。可変変数を雑に扱うとIDEで追いかけることが難しかったり、不意に値が現れたりすることで混乱のもとになります。逆に混乱を抑えられる場合、有効です。例えばコーディング規約を作成し、規約に従う方法です。
 多くのフレームワークや大規模なライブラリなどには可変変数の様なを利用して実現している機能があります。例えばLaravelのEloquentモデルは特定の関数名ならば特定の種類の動作をするという機能(クエリビルダ、アクセサ、ミューテタ)を備えており、これはこの可変変数を用いることで簡単に実現できます。フレームワークに備わった可変変数を用いた機能は漫然と使っていてはなかなか気づきません。公式ドキュメント、リファレンス、といった説明書に書かれた可変名に関する説明を読むことが重要になります。

  • この記事いいね! (0)
村上 著者:村上

【Cordova】FCMを導入した時の「Error: Invalid data, chunk must be a string or buffer, not object」エラー対処法

今回は、Cordovaアプリに cordova-plugin-fcm を導入した際に発生したエラーについてです。
なお、端末は Android です。
エラーはこちら。

Error: Invalid data, chunk must be a string or buffer, not object

翻訳すると、「エラー:無効なデータです。チャンクはオブジェクトではなく文字列またはバッファでなければなりません」とのこと。
これだけだとよく分かりませんが、FCM の導入時に作成した google-services.json が関係しているのでしょうか。
が、ファイルを置く場所はあっているし、内容もダウンロードした時のままなので、間違っているはずもなく…。

 

そして調べたところ、下記の記事がヒットしました。

Cordovaで cordova-plugin-fcm を追加すると発生するエラーを消す方法 – 備忘録
https://kagasu.hatenablog.com/entry/2018/10/04/215302

まさに求めていた内容そのもの!
原因は分かりませんでしたが、対処法としては、fcm_config_files_process.js というファイルを、下記の内容に置き換えて実行するだけでした。
なお、fcm_config_files_process.js の場所は、下記にあります。
[プロジェクト名]/plugins/cordova-plugin-fcm/scripts/fcm_config_files_process.js

書き換えるファイルの内容については、下記をまるっとコピー&ペーストしてください。

Invalid data, chunk must be a string or buffer, not object・Issues #213・fechanique/cordova-plugin-fcm・GitHub
https://github.com/fechanique/cordova-plugin-fcm/issues/213#issuecomment-357162384

あとは、通常通りビルドしたところ、発生していたエラーが表示されなくなりました。

 

以上、cordova-plugin-fcm 導入時に発生したエラーの対処法でした。

  • この記事いいね! (0)
takahashi 著者:takahashi

macOS mojaveへのアップグレード方法

先日、ついに自分が所有するMacbook Air を Mojaveに更新しました!

今回もかなり簡単に更新ができたので、手順をご紹介したいと思います。
まずはmacOSのインストーラーをApp Storeからダウンロードします。

macOS Mojave – Mac App Storeプレビュー

ダウンロードが完了すると、アプリケーションフォルダに”macOS mojave インストール”アプリが追加されます。

クリックすると、インストールウィザードが立ち上がります。

なお、以前記事にも書きましたが、3TB ストレージを搭載したiMac (27-inch, Late 2012)モデルでmojaveにアップグレードする際、BootCamp領域の削除が必要になり、mojaveへアップグレード後はBootCampが利用できなくなるので注意してください。

ここからいよいよインストールをしていきます。

利用規約を確認すると

インストール先のディスクを選択する画面が出てきます。
基本的には1台のはずですが、複数台のディスクを接続している場合はそれも表示される可能性があるので、アップグレードしたいmacOSがインストールされているディスクを選択します。

”インストール”をクリックするとインストールが始まります。

管理者ユーザーのIDとパスワードを求められるので、情報を入力して”ヘルパーを追加”をクリックします。

インストール中。
SSDモデルであれば時間はさほどかからないかと思います。

準備が完了すると、再起動を促されるので再起動します。

画面が汚くてすみません(汗
再起動後、いつもの林檎マークが出てきて、アップグレード作業が始まります。
ここはかなり時間がかかり、自分のmacでは体感1時間ぐらいかかった気がします。

完了すると初期ウィザードが表示されます。
まずはApple IDを入力し、Appleアカウントにログインしておきます。

2段階認証の設定をするかどうかを聞かれます。
僕の場合は2段階認証を使わないのでチェックは外しました。

iCloudキーチェーン(認証情報共有機能)の設定です。
これをやっておくと、macOSのキーチェーンに保存されている認証情報を、同じアカウントでログインしているmacに同期できるようです。

いよいよ今回の目玉の一つである、”ダークモード”の選択肢が出てきました…!
ダークモードを選ぶと、macOSの基本UIがすべて黒基調になります。

ダークモードを選択した画面。
ウィザードの時点で既にカッコイイ…

設定はこれで以上のようです。
暫く待つと…

デスクトップが表示されました…!!

ダークモードにしたのですべて黒基調になってます!
とてもクールですね!

細かい使用感などはまたしばらく仕様してみてから投稿したいと思います。

  • この記事いいね! (0)
takahashi 著者:takahashi

他のデバイスのWindowsのサブディスプレイ化が簡単にできるアプリ”spacedesk”

Windows 10 から、Windowsには標準機能で”このPCへのプロジェクション”機能がついています。
この機能を使うと、Miracast対応デバイスをWindows PCのサブディスプレイとして使うことができます。
標準機能なので手間もかからず、安心して使えるのはとてもいいところなのですが、まだ粗削りな部分が多く、解像度の相性が悪かったりすると画面のサイズが合わなかったり、うまく動作しなかったりという部分がまだあります。
また、Miracast対応デバイスでないと接続できないため、mac OS/iOSやLinux等では通常利用できません。

そんなこともあって代替えになりそうなアプリをいろいろ探していたところ、こちらのアプリを見つけました。

spacedeskというアプリです。

サーバー(仮想ディスプレイを使う側)はWindowsのみ対応になっていますが、クライアント側(仮想ディスプレイになる側)はWindowsの外に、iOSとAndroidのデバイスも使うことができ、さらにHTML5版も用意されているので、macOSやLinux、ChromeOSなどでも利用することができます。

自分の手元のPCで試したところ、アプリ版よりもHTML5版の方がより高速に動作している印象でした。

大きなメニューアイコンが出てくるのが玉に瑕ですが、使っている分にはあまり気になりませんでした。

操作も簡単で使いやすいので、暫く使ってみたいと思います。

  • この記事いいね! (0)