No Programming, No Life

プログラミング関連の話題や雑記

WSLのUbuntuでRubyGems3.1.2から3.1.4へのUpdate時、operating_system.rbでエラーになる

f:id:fumokmm:20200830002656p:plain

はじめに

先日ふと思い立って、WindowsGithub Pagesでウェブページを作ろうと思い、色々と調べているところだった。エラーが発生したのは、こちらの記事を参考に、WSLUbuntuJekyllの環境を整えるため、Rubyの環境をインストールしていた時だった。以下コマンドにてエラーが出てしまい、先に進まなくなった。

$ sudo gem install jekyll bundler

エラーが出た時点でのバージョンは以下のような状態だった。

$ ruby -v
ruby 2.7.0p0 (2019-12-25 revision 647ee6f091) [x86_64-linux-gnu]
$ gem -v
3.1.2

原因調査

色々調べていった結果、RubyGemsoperating_system.rbに不具合があるらしく(?)、バージョン3.1.4で修正されてるから、アップデートしてねというイシューを見かけた。しかし、アップデートしてみたところ、それでもエラーになる状態だった。

$ sudo gem update --system
Updating rubygems-update
Successfully installed rubygems-update-3.1.4
Parsing documentation for rubygems-update-3.1.4
Done installing documentation for rubygems-update after 0 seconds
Parsing documentation for rubygems-update-3.1.4
Done installing documentation for rubygems-update after 0 seconds
Installing RubyGems 3.1.4
Traceback (most recent call last):
        5: from setup.rb:28:in `<main>'
        4: from setup.rb:28:in `require'
        3: from /var/lib/gems/2.7.0/gems/rubygems-update-3.1.4/lib/rubygems.rb:1424:in `<top (required)>'
        2: from /var/lib/gems/2.7.0/gems/rubygems-update-3.1.4/lib/rubygems.rb:1424:in `require'
        1: from /usr/lib/ruby/vendor_ruby/rubygems/defaults/operating_system.rb:49:in `<top (required)>'
/usr/lib/ruby/vendor_ruby/rubygems/defaults/operating_system.rb:50:in `<class:Specification>': undefined method `rubyforge_project=' for class `Gem::Specification' (NameError)

解決方法

さらに検索して、別のイシューにたどり着く。

こちらによると、RubyGems 3.1.4はダメだけど、3.1.3ならいい感じとのことだったので、試してみたら確かにいい感じだった。その後、インストール作業もスムーズに進められた。

$ sudo gem update --system 3.1.3
Updating rubygems-update
Fetching rubygems-update-3.1.3.gem
Successfully installed rubygems-update-3.1.3
Parsing documentation for rubygems-update-3.1.3
Installing ri documentation for rubygems-update-3.1.3
Installing darkfish documentation for rubygems-update-3.1.3
Done installing documentation for rubygems-update after 57 seconds
Parsing documentation for rubygems-update-3.1.3
Done installing documentation for rubygems-update after 0 seconds
Installing RubyGems 3.1.3
  Successfully built RubyGem
  Name: bundler
  Version: 2.1.4
  File: bundler-2.1.4.gem
Bundler 2.1.4 installed
RubyGems 3.1.3 installed
Regenerating binstubs
Parsing documentation for rubygems-3.1.3
Installing ri documentation for rubygems-3.1.3

=== 3.1.3 / 2020-05-05

* Fix platform comparison check in #contains_requirable_file?. Pull
  request #3495 by Benoit Daloze.
* Improve gzip errors logging. Pull request #3485 by David Rodríguez.
* Fix incorrect `gem uninstall --all` message. Pull request #3483 by David
  Rodríguez.
* Fix incorrect bundler version being required. Pull request #3458 by
  David Rodríguez.
* Resolver: require NameTuple before use. Pull request #3171 by Olle
  Jonsson.
* Use absolute paths with autoload. Pull request #3100 by David Rodríguez.
* Avoid changing $SOURCE_DATE_EPOCH. Pull request #3088 by Ellen Marie
  Dash.
* Use Bundler 2.1.4. Pull request #3072 by Hiroshi SHIBATA.
* Fix gem install from a gemdeps file with complex dependencies.
  Pull request #3054 by Luis Sagastume.
* Add tests to check if Gem.ruby_version works with ruby git master.
  Pull request #3049 by Yusuke Endoh.


------------------------------------------------------------------------------

RubyGems installed the following executables:
        /usr/bin/gem2.7
        /usr/bin/bundle2.7

Ruby Interactive (ri) documentation was installed. ri is kind of like man
pages for Ruby libraries. You may access it like this:
  ri Classname
  ri Classname.class_method
  ri Classname#instance_method
If you do not wish to install this documentation in the future, use the
--no-document flag, or set it as the default in your ~/.gemrc file. See
'gem help env' for details.

RubyGems system software updated

おわりに

それにしても、こういうインストール作業ってだいたいうまく行かないことが多い。インストールの紹介記事が書かれた時点から、各種パッケージのバージョンなどが目まぐるしくアップデートされて行くから、同じ状態を再現するのが難しいのだろうなとは思う。技術者にはエラーが発生したとき、根気強くそのエラーと付き合っていく能力が必須だとあらためて感じた。

参考

cannot update gem --system · Issue #3701 · rubygems/rubygems · GitHub

`gem update --system` results in dozens of `Gem::Specification#rubyforge_project=` deprecation warnings · Issue #3269 · rubygems/rubygems · GitHub

Bundler: How to troubleshoot RubyGems and Bundler TLS/SSL Issues

JavaでIntStreamからStringのListを作る

f:id:fumokmm:20200828190008p:plain

IntStreamからStringのList(List)を作りたかったんですが、 .map だとintにしか変換できんなぁと思っていたら .mapToObj を使えばいいようです。

List<String> numList = IntStream.range(1, 10)
    .mapToObj(new DecimalFormat("000")::format)
    .collect(Collectors.toList());

こんな感じで。 numListには ["000", "001", ... "009"] が入ります。

Web版Excelでマクロ(自動化)にTypeScriptが使えるらしいってことで試してみたが

f:id:fumokmm:20200804161251p:plain

Microsoft365で使えるWeb版ExcelではマクロじゃなくてOffice Scriptsっていうのが使えるらしく、言語はなんとTypeScriptだという話。 さっそく試してみたのですが…

まだプレビュー版らしくて

まだプレビュー版らしくて、Microsoft 365 管理センター とやらから設定でOffice Scriptsを有効にしないといけないらしい。 以下画像参照

f:id:fumokmm:20200804161352p:plainf:id:fumokmm:20200804161357p:plain

なんか問題が発生するんだが…

あら、問題が発生してレコーディングできない😂

f:id:fumokmm:20200804161437p:plain

サンプルスクリプトみたいなのポチポチしてたらやっとTypeScriptに出会えた。※保存できないけど😇

f:id:fumokmm:20200804161446p:plain

まとめ

ということで、結局まだ使えなかったです。日をあらためてトライしてみます。

Windows10のIMEで切り替え時の「あ」や「A」を非表示にする方法

IMEのアイコンを右クリックして、プロパティを選択

f:id:fumokmm:20200715103458p:plain

IME入力モード切替の通知の画面中央に表示するチェックボックスをオフにする

f:id:fumokmm:20200715103510p:plain

以上

参考

Windows 10でIME切り替え時の「あ」や「A」の表示をオフにする:Tech TIPS - @IT

VBA(Excel)で文字列結合(Join)する関数

f:id:fumokmm:20200504205857p:plain

TEXTJOIN関数が使えないときに使うため、文字列結合関数を書きました。 エラー処理などは省略していますので、実用の際は適当に拡張してお使い下さい。

概要

イメージとしては、[引数1, 引数2, 引数3...] となった時に、"引数1, 引数2, 引数3, ..." という文字列を返却してくれる関数ということです。 Excelの標準関数にTEXTJOINというのが追加されましたが、こちらはMicrosoft 365でしか使えないのかな?よくわかりません。なので、 TEXTJOINが使えないときにサクっと使えるようにするため、StrJoinという関数を書きました。

仕様

  • 引数で指定された内容を指定された結合文字列で繋いだ文字列を返却する
  • 値数式で参照可能
  • 範囲でも指定可能
  • 直接指定可能
  • 接続文字、先頭、末尾文字を指定可能

ソース

Option Explicit

''
' 文字列の結合関数
'
' 処理概要:
'   文字列の結合を行います。
'   特徴
'     ・値数式で参照可能
'     ・範囲でも指定可能
'     ・直接指定可能
'     ・接続文字、先頭、末尾文字を指定可能
'
' 引数:
'  x_startStr  - 開始文字列
'  x_endStr    - 終了文字列
'  x_joinStr   - 接続文字列
'  x_values    - 文字列や範囲(複数指定可)
'
Public Function StrJoin(x_startStr As String, x_endStr As String, x_joinStr As String, ParamArray x_values() As Variant) As String
    Dim p_result As String: p_result = ""
    Dim p_ratch As Boolean: p_ratch = False
    Dim p_value As Variant
    For Each p_value In x_values
        If TypeName(p_value) = "Range" Then
            Dim p_RangeValue As Range: Set p_RangeValue = p_value
            Dim p_rng As Range
            For Each p_rng In p_RangeValue
                If p_ratch Then p_result = p_result & x_joinStr Else p_ratch = True
                p_result = p_result & p_rng.Value
            Next p_rng
        Else
            If p_ratch Then p_result = p_result & x_joinStr Else p_ratch = True
            p_result = p_result & CStr(p_value)
        End If
    Next p_value
    StrJoin = x_startStr & p_result & x_endStr
End Function

挙動とは関係ないですが、VBEのエディタが貧弱なので、変数名に以下のコーディングルールを採用しています。

  1. 引数の変数名は "x_" で始める。その後ろは自由
  2. ローカル変数名は "p_" で始める。その後ろは自由

上記コードもこのルールで記述しています。

リポジトリ

github.com

利用例(デモ)

f:id:fumokmm:20200714135453g:plain

まとめ

  • Excel関数としても利用できます
  • TEXTJOINが使えるときは、そちらを使ったほうがいいかもしれません

参考