20200125のMacに関する記事は9件です。

iosのgoodreaderでsftpのprivate-keyが読み込めない問題

これはmacのssh-keygenで作成されるコマンドの出力が変更されているので、昔作ったキーでは読み込めますが、新しく作ったキーは読み込めません。よって、キーを作り直すか、キー自体を編集しましょう。

# 公開鍵、秘密鍵の作成
$  ssh-keygen -t rsa -b 4096 -m PEM -f ~/.ssh/goodreader

# serverにpublic-keyを登録
$ ssh-copy-id -i ~/.ssh/goodreader.pub user@192.168.1.11 -p 22

# ~/.ssh/goodreader
# (private-key)をiosのgoodreaderに持っていく
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

anyenv下のphpenvを使ってPHPをインストールしてみた

Homebrewでインストールしたanyenvに導入されたphpenvを使ってPHPをインストールしていきます。
割とすんなりと行かなかったので備忘録。
anyenvとphpenvは導入している前提となります。

環境
macOS : Catalina 10.15.2 (zsh)
phpenv : v0.9.0-rc.1
入れるPHP : 7.4.1

早速インストール

コンソール上でコマンドを打ちphpenvでPHPのインストールを試みました。

phpenv install 7.4.1

するとエラーが。

No package 'krb5-gssapi' found
No package 'krb5' found

Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.

Alternatively, you may set the environment variables KERBEROS_CFLAGS
and KERBEROS_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.

必要なパッケージのインストール&パスを通す

PHPのインストールにはいくつか必要なパッケージがあるようで、それが入っていない、またはパスが通っていないとこのようなエラーが出るようです。

今回はkrb5が足りないのでHomebrewよりインストールしてパスを通します。
私はzshを使っていますので.zshrcに書き込みます。
インストールする際に他にもパッケージ不足を指摘されましたら同様の手順でインストールします。

brew install krb5
.zshrc
vim ~/.zshrc

export PATH="/usr/local/opt/krb5/bin:$PATH"
export PATH="/usr/local/opt/krb5/sbin:$PATH"
export PKG_CONFIG_PATH="/usr/local/opt/krb5/lib/pkgconfig:$PKG_CONFIG_PATH"

phpenvのdefault_configure_options設定

設定後にPHPを再度インストールしようとするがまたエラーが出ました。

configure: WARNING: unrecognized options: --with-png-dir, --with-libxml-dir, --with-icu-dir
configure: error: Please reinstall the BZip2 distribution

errorとして、BZip2の再インストールを要求されましたので従いましたが全く同じエラーが出てしまいます。

brew reinstall bzip2

どうもパスが通っていなかったようなので.zshrcにパスを設定しましたがこれだけでは解決せず。
合わせてphpenvのdefault_configure_optionファイルに設定を追記することで解決!
icu4cパッケージも同様のエラーを引き起こしたのでこれも合わせて記述。

.zshrc
vim ~/.zshrc

export PATH="/usr/local/opt/bzip2/bin:$PATH"
export PATH="/usr/local/opt/icu4c/bin:$PATH"
export PATH="/usr/local/opt/icu4c/sbin:$PATH"
export PKG_CONFIG_PATH="/usr/local/opt/icu4c/lib/pkgconfig:$PKG_CONFIG_PATH"
/.anyenv/envs/phpenv/plugins/php-build/share/php-build/default_configure_options
vim default_configure_options

--with-bz2=/usr/local/opt/bzip2
--with-iconv=/usr/local/opt/libiconv

libxmlパッケージが見つからない

必要なパッケージをインストールできたので再度PHPのインストールをします。
でもエラー。。。

warning: unsupported relocation in debug_info section.
note: while processing /private/var/tmp/php-build/source/7.4.1/ext/opcache/.libs/zend_accelerator_util_funcs.o
/Library/Developer/CommandLineTools/usr/bin/ranlib: file: ext/opcache/.libs/opcache.a(shared_alloc_shm.o) has no symbols
/Library/Developer/CommandLineTools/usr/bin/ranlib: file: ext/opcache/.libs/opcache.a(shared_alloc_shm.o) has no symbols
/Library/Developer/CommandLineTools/usr/bin/ranlib: file: /var/tmp/php-build/source/7.4.1/modules/opcache.a(shared_alloc_shm.o) has no symbols
/var/tmp/php-build/source/7.4.1/ext/libxml/libxml.c:34:10: fatal error: 'libxml/parser.h' file not found
#include <libxml/parser.h>
         ^~~~~~~~~~~~~~~~~
1 error generated.
make: *** [ext/libxml/libxml.lo] Error 1

libxml/parser.h が読み込めないらしい
でもlibxmlはインストールされているはず。

brew list

(省略)
libxml2

brew listで確認すると、libxml2が入っているので問題がないはずですが。。。
MacOSがCatalinaになったことでusr/includeディレクトリが無くなったことの絡みで上手く認識がされていないようです。
(brewの理解するlibxml2のパスが間違っている?)
下記の記事を参考にenvコマンドとprefixを利用して環境変数を指定しながらインストールすることで上手くいきました!

参考: macOS Catalina(10.15) の Xcode11 だと /usr/include が無い

env CFLAGS="$(xml2-config --cflags)" XML_CFLAGS="$(xml2-config --cflags)" XML_LIBS="$(xml2-config --libs)" phpenv install 7.4.1

[Success]: Built 7.4.1 successfully.

なんとか成功しました!
anyenvで*env各種を一括管理できるのでphpenvを利用しましたがもしかしたらphpbrewの方が楽なのかも。。。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

SwiftUIとSpeech Frameworkで動画の文字起こしアプリを作ってみる

音声認識に興味が出たので、Apple製のSpeech FrameworkとSwiftUIを使って簡易的なMacアプリ作ってみたので得られた知見をご紹介します。

完成品

ニュース動画のファイルを選択して、音声認識しています。
SpeechRecognizer.mov.gif

ニュース動画なのでアナウンサーの声だけでノイズがないからか、かなりの精度:ok_hand:

開発環境

  • SwiftUI
  • Speech Framework
  • Swift5.1
  • macOS 10.15.2(Catalina)
  • Xcode 11.3.1

MacでSpeech FrameworkとSwiftUI使えるのはCatalina以降なので最新版にアップデートしましょう

SwiftUIベースのMacアプリ作成

create new projectからmacOSのAppを選択し、User Interfaceの項目をSwiftUIにします

スクリーンショット 2020-01-25 15.40.56.png

初期状態で作成されるContentView.swiftにレイアウト定義と音声認識の処理をつらつら書いていきます。
SwiftUIといえど、Viewに処理を書くのはあまり良くありませんが、今回は簡易的なアプリなので、 全部Viewに処理を書いてしまいます

ContentView.swift
import SwiftUI
import Speech

struct ContentView: View {
    @State var recognizedText: String?
    @State var message: String = ""
    private let speechRecognizer = SFSpeechRecognizer(locale: Locale(identifier: "ja-JP"))

    var body: some View {
        VStack(alignment: .trailing) {
            Text(recognizedText ?? "")
                .font(.body)
                .frame(width: 480, height: 320, alignment: .top)
                .border(Color.gray)
                .padding()
            HStack {
                Text(message)
                Button("Choose file") {
                    SFSpeechRecognizer.requestAuthorization { (status) in
                        guard status == .authorized else {
                            print("音声入力が認可されていません")
                            return
                        }
                        // NSOpenPanelはMain Threadからのみアクセス可
                        DispatchQueue.main.async {
                            let panel = NSOpenPanel()
                            let result = panel.runModal()
                            guard result == .OK, let url = panel.url else {
                                print("ファイル読み込みに失敗")
                                return
                            }

                            let speechRequest = SFSpeechURLRecognitionRequest(url: url)
                            self.message = "音声認識中..."
                            self.recognizedText = ""
                            _ = self.speechRecognizer?.recognitionTask(with: speechRequest, resultHandler: { (speechResult, error) in
                                guard let speechResult = speechResult else {
                                    return
                                }

                                if speechResult.isFinal {
                                    self.message = "音声認識が完了しました"
                                    print("Speech in the file is \(speechResult.bestTranscription.formattedString)")
                                } else {
                                    let text = speechResult.bestTranscription.formattedString
                                    self.recognizedText = text
                                }
                            })
                        }
                    }
                }
            }.padding()
        }
    }
}

コード解説

@State

SwiftUIのホットリロード機能の一番簡単な@Stateを用いて、UI更新処理を書かないようにしています

NSOpenPanel

Macのファイルダイアログをプログラムから呼ぶのはNSOpenPanelというクラス使うらしいです。初めてしりました。Viewファイルに書いてあるから大丈夫かと思いきや明示的にMainスレッド指定しないと実行時エラーになってしまうので注意

SFSpeechRecognizer

今回のアプリの肝のクラスですね
日本語の文字起こしを想定しているので ローカル情報をja-JPにしたインスタンスを保持。
ユーザ認可をリクエストしたのち、ファイルダイアログから取得できたファイルのURLでSFSpeechURLRecognitionRequestのインスタンスを作って、認識タスクをコールバックと同じく登録して完了です。

コールバックで返却されるSFSpeechRecognitionResultに認識結果が返ってくるので、それを画面に表示してあげるだけで完了です。
.bestTranscription.formattedStringというプロパティにいわゆる文字起こし結果が入ってきますが、他にも声の抑揚や、話す早さなどが返ってくるのが面白いところなので、興味ある方は色々デバッグして見てみると良いかもしれません。

注意点

plistに音声入力の説明を定義忘れずに

NSSpeechRecognitionUsageDescriptionに音声入力を許可するダイアログ時の文言をセットを忘れずに
最近めっきりプライバシーに厳しいAppleフレームワーク。他のフレームワーク同様、音声入力もユーザ認可が必要なのであしからず。

音声認識できる時間の上限が1分

オンラインを介した音声認識のみ、上限が設けられています。
これはそもそもiOS等々のキーボードからの音声入力が1分という上限があるかららしい。(バッテリーや通信量に配慮する為)
1分ごとに区切ってタスクを捌いていけば、長時間動画の完全文字起こしもいけそう?

iOS13から端末上のみで音声認識できるようになり、そちらなら上限はないようだが、対応言語が絞られる(日本語非対応)上に継続的に改善されるオンラインとは違い、精度が良くないとのこと。この辺はトレードオフですね。

まとめ

SwiftUIとSpeech Framework凄すぎ

音声認識の知識ほぼ皆無な私でも簡単なアプリ作れちゃうくらいシンプルなインターフェイスと使いやすいフレームワークな上に精度もかなりでビックリしました。
Macアプリは殆ど作ったことない私でもこれ、ググったりするだけで1時間くらいで作成できました(むしろこのQiita書くほうが時間かかってる。。。)

参考にした記事

[iOS] 最新のSpeech Recognitionについて

【iOS】Speech Frameworkの実装

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

(コマンド化)AWS CLIにおけるMFA認証

概要

AWSマネジメントコンソールにアクセスするためのIAMユーザーにMFAを設定している場合、
同ユーザーにてAWS CLIを使う時にもMFAによる認証が必要になるけど、
すぐに忘れちゃうのでコマンド化した。

ざっくりセットアップ手順

  1. アクセスキーの作成(まだやってない人は)
  2. .bashrcに以下追記
  3. ログインし直す or source ~/.bashrc
.bashrc

function AWSCLIINIT() {
    unset AWS_ACCESS_KEY_ID
    unset AWS_SECRET_ACCESS_KEY
    unset AWS_SESSION_TOKEN
    aws configure

    mfa_arn=`aws sts get-caller-identity --query 'Arn' --output text 2>/dev/null | sed -e "s/:user\//:mfa\//g"`
    if [ -n "$mfa_arn" ]
    then
        echo "YourMFA :"$mfa_arn
        echo -n INPUT YourMFA-Code :
        read mfa_code

        get_session_token=`aws sts get-session-token --output text --serial-number $mfa_arn --token-code $mfa_code 2>/dev/null`

        if [ -n "$get_session_token" ]
        then
            set -- $get_session_token
            export AWS_ACCESS_KEY_ID=$2
            export AWS_SECRET_ACCESS_KEY=$4
            export AWS_SESSION_TOKEN=$5
        else
            echo "MFA ERROR"
        fi

    else
        echo "aws configure is wrong"
    fi
}

使い方

AWSCLIINIT

  • 中でaws configureをやってるので必要に応じて入力
  • mfaを聞かれるので入力
$ AWSCLIINIT 
AWS Access Key ID [********************]: 
AWS Secret Access Key [********************]: 
Default region name [ap-northeast-1]: 
Default output format [json]: 
YourMFA :arn:aws:iam::123456789012:mfa/abcdefg
INPUT YourMFA-Code :123456
$

エラーがでなければ認証成功。環境変数にトークンなどがセットされます。

こんな感じ。

MFA認証前

$ aws iam get-user

An error occurred (AccessDenied) when calling the GetUser operation: User: arn:aws:iam::123456789012:user/abcdefg is not authorized to perform: iam:GetUser on resource: user abcdefg with an explicit deny

本コマンド利用時

$ aws iam get-user
{
    "User": {
        "UserName": "abcdefg", 
        "PasswordLastUsed": "2020-01-25T01:16:10Z", 
        "CreateDate": "2019-12-10T02:55:57Z", 
        "UserId": "AAAAAAAAAAAAAAAAAA", 
        "Path": "/", 
        "Arn": "arn:aws:iam::123456789012:user/abcdefg"
    }
}

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

macOS / OSXの起動可能なインストールディスクを作る

macOS / OSXのUSB起動ディスクを作る

古いMacを購入した際にOSをインストールするときや、macのOSを再インストールしたいとき、古いmacOS / OSXのインストーラーが必要となる場合がある。ここでは、USBやSDカードにmacOSのインストーラーを書き込み、起動可能なディスクにする方法を記載していく。

起動ディスクの作成にあたって

起動ディスクを作るにあたっていくつか必要なものが存在する。
●*macOSのインストーラー
●8GB以上のUSBやSDカードなど
●もう一つのMac

*macOSのインストーラーは現在、AppStoreからは最新のOSしかダウンロードすることはできない。つまり、OSXのインストーラーが必要な場合にはインターネットリカバリーを行うもしくはOSXのインストールディスクをAppleStoreから購入する必要がある。

準備

まずは、macOSのインストーラーをアプリケーションフォルダ内に入れておく。
次にインストールするメディアに「ディスクユーティリティ」を使い、*「MyVolume」という名前をつける。
スクリーンショット 2020-01-25 13.16.30.png
フォーマットは「Mac OS拡張(ジャーナリング)」を選択し、消去する。

*「MyVolume」は書込み作業を行う際の一時的な名前であるが、もし「MyVolume」という名前を使いたくなければ、下記インストールコマンドの/Volumes/MyVolumeのMyVolumeを設定したい名前へと変更すれば良い。

書き込み作業(Mavericks10.9以降)

それでは作業を始めていく。

  1. ターミナルを開く
  2. 持っているインストーラーに対応した下記のコマンドをコピーする
  3. ターミナルにペースト
  4. パスワードが要求されるのでパスワードを入力
  5. Yと入力
  6. 30分ぐらいで書き込みが終わり、起動可能なインストーラーが完成する。

起動ディスク作成コマンド

OSX Mavericks(10.9)以降を使うのであれば下記の"createinstallmedia"コマンドをコピペするだけで済む。使用するインストーラーに対応したコマンドをコピーする。

Mavericks (10.9)

Mavericks
sudo /Applications/Install\ OS\ X\ Mavericks.app/Contents/Resources/createinstallmedia --volume /Volumes/MyVolume --applicationpath /Applications/Install\ OS\ X\ Mavericks.app

Yosemite (10.10)

Yosemite
sudo /Applications/Install\ OS\ X\ Yosemite.app/Contents/Resources/createinstallmedia --volume /Volumes/MyVolume --applicationpath /Applications/Install\ OS\ X\ Yosemite.app

ElCapitan (10.11)

ElCapitan
sudo /Applications/Install\ OS\ X\ El\ Capitan.app/Contents/Resources/createinstallmedia --volume /Volumes/MyVolume --applicationpath /Applications/Install\ OS\ X\ El\ Capitan.app

Sierra (10.12)

Sierra
sudo /Applications/Install\ macOS\ Sierra.app/Contents/Resources/createinstallmedia --volume /Volumes/MyVolume --applicationpath /Applications/Install\ macOS\ Sierra.app

HighSierra (10.13)

HighSierra
sudo /Applications/Install\ macOS\ High\ Sierra.app/Contents/Resources/createinstallmedia --volume /Volumes/MyVolume

Mojave (10.14)

Mojave
sudo /Applications/Install\ macOS\ Sierra.app/Contents/Resources/createinstallmedia --volume /Volumes/MyVolume --applicationpath /Applications/Install\ macOS\ Sierra.app

Catalina (10.15)

Catalina
sudo /Applications/Install\ OS\ X\ El\ Capitan.app/Contents/Resources/createinstallmedia --volume /Volumes/MyVolume --applicationpath /Applications/Install\ OS\ X\ El\ Capitan.app

書き込み作業(Lion10.7 & Mountain Lion10.8)

もしMacOS X LionもしくはMountainLionの起動ディスクを作成する場合は、上記のコマンドを使用して作成することができない。よって以下の方法に絞られてしまう。

1) AppleStoreよりインストールディスクを¥2222で購入
2) ディスクユーティリティを使用した復元
3) 後述するDiskMakerを使用した作成

もしLionもしくはMountainLionのインストーラーを持っているのであれば、ディスクユーティリティを起動し、dmgファイルをメディアへと復元すれば良い。

書き込み作業(全OS共通)

もしコマンドが使えない場合や諸事情により起動ディスクを作成できなかった場合、「DiskMaker」というアプリケーションを使用したディスクの作成方法がある。
ただし、この方法で確実にインストーラーの作成が成功するとは限らない。

  1. インストーラーをアプリケーションフォルダに入れておく。
  2. DiskMakerをダウンロード(所持しているインストーラーに対応したバージョンを選択)
  3. 手順に沿って作成作業を行う

Macにインストール

  1. インストールするMacを*Optionキーを押しながら起動。
  2. 起動したら、メディアをMacに差し込む
  3. 起動ディスクとして先程のメディアを選択
  4. macOSユーティリティ or OSXユーティリティが起動
  5. インストール作業を進める

*Windowsキーボードを使用しているのであればAltキーを押下

追記情報

2020/01/25 掲載

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

古いmacOS / OSXの起動ディスクを作る

macOS / OSXのUSB起動ディスクを作る

古いMacを購入した際にOSをインストールするときや、macのOSを再インストールしたいとき、古いmacOS / OSXのインストーラーが必要となる場合がある。ここでは、USBやSDカードにmacOSのインストーラーを書き込み、起動可能なディスクにする方法を記載していく。

起動ディスクの作成にあたって

起動ディスクを作るにあたっていくつか必要なものが存在する。
●*macOSのインストーラー
●8GB以上のUSBやSDカードなど
●もう一つのMac

*macOSのインストーラーは現在、AppStoreからは最新のOSしかダウンロードすることはできない。つまり、OSXのインストーラーが必要な場合にはインターネットリカバリーを行うもしくはOSXのインストールディスクをAppleStoreから購入する必要がある。

準備

まずはインストールするメディアに「ディスクユーティリティ」を使い、*「MyVolume」という名前をつける。
スクリーンショット 2020-01-25 13.16.30.png
フォーマットは「Mac OS拡張(ジャーナリング)」を選択し、消去する。

*「MyVolume」は書込み作業を行う際の一時的な名前であるが、もし「MyVolume」という名前を使いたくなければ、下記インストールコマンドの/Volumes/MyVolumeのMyVolumeを設定したい名前へと変更すれば良い。

書き込み作業

それでは作業を初めていく。とは言ってもインストーラーのバージョンと対応した下記のコマンドをターミナルにコピペすればいいだけの話である。

  1. ターミナルを開く
  2. 持っているインストーラーに対応した下記のコマンドをコピーする
  3. ターミナルにペースト
  4. パスワードが要求されるのでパスワードを入力
  5. Yと入力
  6. 30分ぐらいで書き込みが終わり、起動可能なインストーラーが完成する。

Mavericks (10.9)

sudo /Applications/Install\ OS\ X\ Mavericks.app/Contents/Resources/createinstallmedia --volume /Volumes/MyVolume --applicationpath /Applications/Install\ OS\ X\ Mavericks.app

Yosemite (10.10)

sudo /Applications/Install\ OS\ X\ Yosemite.app/Contents/Resources/createinstallmedia --volume /Volumes/MyVolume --applicationpath /Applications/Install\ OS\ X\ Yosemite.app

ElCapitan (10.11)

sudo /Applications/Install\ OS\ X\ El\ Capitan.app/Contents/Resources/createinstallmedia --volume /Volumes/MyVolume --applicationpath /Applications/Install\ OS\ X\ El\ Capitan.app

Sierra (10.12)

sudo /Applications/Install\ macOS\ Sierra.app/Contents/Resources/createinstallmedia --volume /Volumes/MyVolume --applicationpath /Applications/Install\ macOS\ Sierra.app

HighSierra (10.13)

sudo /Applications/Install\ macOS\ High\ Sierra.app/Contents/Resources/createinstallmedia --volume /Volumes/MyVolume

Mojave (10.14)

sudo /Applications/Install\ macOS\ Sierra.app/Contents/Resources/createinstallmedia --volume /Volumes/MyVolume --applicationpath /Applications/Install\ macOS\ Sierra.app

Catalina (10.15)

sudo /Applications/Install\ OS\ X\ El\ Capitan.app/Contents/Resources/createinstallmedia --volume /Volumes/MyVolume --applicationpath /Applications/Install\ OS\ X\ El\ Capitan.app

Macにインストール

  1. インストールするMacを*Optionキーを押しながら起動。
  2. 起動したら、メディアをMacに差し込む
  3. 起動ディスクとして先程のメディアを選択
  4. macOSユーティリティ or OSXユーティリティが起動
  5. インストール作業を進める

*Windowsキーボードを使用しているのであればAltキーを押下

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【ReactNative】No bundle URL presentエラーの対処法メモ

概要

以前にReactNativeの開発環境を構築する話(Mac編)なんて記事を書いたのですが、久しぶりにそれに従って新規に開発環境を構築してみたらよくわからないエラーに遭遇した話。

※本記事に記載されているのは、あくまで推察と暫定的な対処のメモです。間違い、指摘等がございましたらコメントにていただけますと幸いです。

エラー内容

Xcode, VSCodeHomebrew, Nodebrew, cocoapods, npm, yarn,react-native-cliなどなど色々入れて新規にプロジェクトを作成。

react-native init Puni
cd Puni/ios
pod install
react-native run-ios

すると、Simuratorが立ち上がりbundleも動いている様子。
しかしながら下記のようにNo bundle URL presentのエラーに遭遇。
nobundle.png

どうやらアプリからbundleが見れていないようなのだが・・・
類似の事例を調べてみたらReact Native「No bundle URL present」エラー対策集のような記事を発見。
パッケージを入れ直したり、キャッシュを消してみたり、と一通り試してみたが解消されず。

解決策

もうダメかと思ったが、今度は下記のような記事を発見。

main.jsbundle file showing in my iOS project but still throwing “No bundle url present”

なにやらmain.jsbundleがうまく作成されていないっぽい?

解決策にある通りにコマンドラインからmain.jsbundleを作り直してみる。

react-native bundle --entry-file='index.js' --bundle-output='./ios/main.jsbundle' --dev=false --platform='ios' --assets-dest='./ios'

さらにXcodeからxcworkspaceを開き、main.jsbundleTarget Membershipを設定しなおす(下図)
hoge.png

ダメ元でreact-native run-iosを実行すると・・・
直った!!

考察・まとめ

何が悪さをしてmain.jsbundleが作成されていない(クラッシュしてる?)のかは今のところ分かっていないが、あるとすればreact-native-cliとかその他諸々の特定のバージョンの組み合わせのように思える。

react-nativeのIssuemain.jsbundleで調べた(リンクはこちら)ら似たような事例が出ていたので、いずれ解消・再発するかもしれません。

はっきりとした原因が不明なまま記事に起こしてしまい恐縮ですが、メモ書きとして残しておきます。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

検索エンジンSolr インストール〜起動まで(MAC)

solr.png

全文検索エンジンApache Solrとは

Apacheが提供しているオープンソースの全文検索エンジン

クックパッドなど大規模なサービスに利用されていて、とにかく速いことが特徴

目次

1.Javaのインストール
2.Solrの起動
3.データの投入
4.検索
5.リセット
6.Javaのインストール

Solrの起動にはJavaが必要。入っていない場合はHomebrewを使ってインストールしましょう。

インストールの前にHomebrewを更新

$ brew update

javaのインストール

$ brew cask install java

バージョンを確認してインストール場所のパスを確認

$ /usr/libexec/java_home -V

インストール場所を.bash_profileにコピペして追記し、パスを通す
※パスは$ /usr/libexec/java_home -Vで確認したものに書き換えを

.bash_profile
export PATH=$PATH:/Library/Java/JavaVirtualMachines/openjdk-12.0.2.jdk/Contents/Home`
`export JAVA_HOME=/Library/Java/JavaVirtualMachines/openjdk-12.0.2.jdk/Contents/Home

※.bash_profileがなければルートディレクトリに作成

追記した内容が反映されるようbash_profileを更新

$ source ~/.bash_profile

下記コマンドで記述したパスが表示されればOK

$ echo $PATH`
$ echo $JAVA_HOME`

ミラーサイトからsolr-7.7.2.zip をダウンロード

http://ftp.tsukuba.wide.ad.jp/software/apache/lucene/solr/7.7.2/

解凍したsolr-7.7.2ディレクトリに$ cdで移動
場所はどこでも大丈夫

Solrの起動

起動コマンドを入力

$ ./bin/solr start -e cloud

起動オプションを入力

起動するノード数

This interactive session will help you launch a SolrCloud cluster on your local workstation.

To begin, how many Solr nodes would you like to run in your local cluster? (specify 1-4 nodes) [2]:

デフォルトの2つでOKなのでEnter

1つ目のノードのポート番号

Ok, let's start up 2 Solr nodes for your example SolrCloud cluster.

Please enter the port for node1 [8983]:

こちらもデフォルトでOKなのでEnter

2つ目のノードのポート番号

Please enter the port for node2 [7574]:

こちらもEnter

コレクション名

Please provide a name for your new collection: [gettingstarted]

コレクション名は下記で

echproducts
インデックスの分割数

How many shards would you like to split techproducts into? [2]

デフォルトでOKなのでEnter

レプリカの数

*How many replicas per shard would you like to create? [2] *

こちらもEnter

configset

Please choose a configuration for the techproducts collection, available options are:

_default or sample_techproducts_configs [_default]

促されているように下記でセット

sample_techproducts_configs

すると

Created collection 'techproducts' with 2 shard(s), 2 replica(s) with config-set 'techproducts'
Enabling auto soft-commits with maxTime 3 secs using the Config API
POSTing request to Config API: http://localhost:8983/solr/techproducts/config
{"set-property":{"updateHandler.autoSoftCommit.maxTime":"3000"}}
Successfully set-property updateHandler.autoSoftCommit.maxTime to 3000
SolrCloud example running, please visit: http://localhost:8983/solr

↑で言われたとおりhttp://localhost:8983/solr にアクセスします

Apache Solrの画面が表示されていれば起動できています

データの投入

解凍したsolr-7.7.2の中のexampleディレクトリの中にあらかじめsolrが用意したサンプルファイルがあるので、今回はとりあえずそれを投入

$ bin/post -c techproducts example/exampledocs/*

検索

$ curl "http://localhost:8983/solr/techproducts/select?q=book&wt=xml&indent=true"


q=検索したいワード
wt=出力するファイル形式
indent=インデントをつけるかどうか
をそれぞれ入れると・・

···

検索結果がxml形式で出力される!

···

停止

$ bin/solr stop -all

リセット

ノードを削除し最初の状態に戻します

$ bin/solr stop -all ; rm -Rf example/cloud/
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Apache Solr インストールから起動まで(MAC) 検索エンジンSolrを起動させるまでの手順

全文検索エンジンApache Solrとは

Apacheが提供しているオープンソースの全文検索エンジンです

クックパッドなど大規模なサービスに利用されていて、とにかく速いことが特徴

この記事ではインストール〜起動までの手順を簡単に説明します

目次

1.Javaのインストール
2.Solrの起動
3.データの投入
4.検索
5.リセット
6.Javaのインストール

Solrの起動にはJavaが必要です。入っていない場合はHomebrewを使ってインストールを行います。

インストールの前にHomebrewを更新

$ brew update

javaのインストール

$ brew cask install java
バージョンを確認しインストール場所のパスを確認

$ /usr/libexec/java_home -V
下記を.bash_profileに追記し、パスを通す

.bash_profileがなければルートディレクトリに作成します

※パスは$ /usr/libexec/java_home -Vで確認したものに書き換えてください

export PATH=$PATH:/Library/Java/JavaVirtualMachines/openjdk-12.0.2.jdk/Contents/Home
export JAVA_HOME=/Library/Java/JavaVirtualMachines/openjdk-12.0.2.jdk/Contents/Home
追記した内容が反映されるようbash_profileを更新

$ source ~/.bash_profile
下記コマンドで記述したパスが表示されればOKです

$ echo $PATH
$ echo $JAVA_HOME
ミラーサイトからsolr-7.7.2.zip をダウンロード

http://ftp.tsukuba.wide.ad.jp/software/apache/lucene/solr/7.7.2/

解凍したsolr-7.7.2ディレクトリに$ cdで移動

場所はどこでも大丈夫です

Solrの起動

起動コマンドを入力

$ ./bin/solr start -e cloud

起動オプションを入力

起動するノード数

This interactive session will help you launch a SolrCloud cluster on your local workstation.

To begin, how many Solr nodes would you like to run in your local cluster? (specify 1-4 nodes) [2]:

デフォルトの2つでOKなのでEnter

1つ目のノードのポート番号

Ok, let's start up 2 Solr nodes for your example SolrCloud cluster.

Please enter the port for node1 [8983]:

こちらもデフォルトでOKなのでEnter

2つ目のノードのポート番号

Please enter the port for node2 [7574]:

こちらもEnter

コレクション名

Please provide a name for your new collection: [gettingstarted]

コレクション名は下記にします

echproducts

インデックスの分割数

How many shards would you like to split techproducts into? [2]

デフォルトでOKなのでEnter

レプリカの数

How many replicas per shard would you like to create? [2]

こちらもEnter

configset

Please choose a configuration for the techproducts collection, available options are:

_default or sample_techproducts_configs [_default]

促されているように下記でセットします

sample_techproducts_configs

Created collection 'techproducts' with 2 shard(s), 2 replica(s) with config-set 'techproducts'
Enabling auto soft-commits with maxTime 3 secs using the Config API
POSTing request to Config API: http://localhost:8983/solr/techproducts/config
{"set-property":{"updateHandler.autoSoftCommit.maxTime":"3000"}}
Successfully set-property updateHandler.autoSoftCommit.maxTime to 3000
SolrCloud example running, please visit: http://localhost:8983/solr

http://localhost:8983/solr にアクセスします

Apache Solrの画面が表示されていれば起動できています

データの投入

解凍したsolr-7.7.2の中のexampleディレクトリの中にあらかじめsolrが用意したサンプルファイルがあるので、今回はそれを投入します

$ bin/post -c techproducts example/exampledocs/*

検索

$ curl "http://localhost:8983/solr/techproducts/select?q=book&wt=xml&indent=true"
q=検索したいワード

wt=出力するファイル形式

indent=インデントをつけるかどうか

···

検索結果がxml形式で出力されます

···

停止

$ bin/solr stop -all

リセット

ノードを削除し最初の状態に戻します

$ bin/solr stop -all ; rm -Rf example/cloud/

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む